프로그램/C# 2013. 3. 8. 02:11

C# 파일경로

C#.NET에서 파일경로를 손쉽게 다룰수 있도록 하는 내장객체..



기존의 프로그래밍에서는 파일의 경로부분을 얻기위해, split()나, mid(), right() 메서드 등을 사용하였습니다. 하지만 C#.NET에서는 Path객체를 통해서 확장자 부분만 얻기 외에 다수의 파일경로에 대한 처리를 지원하고 있습니다.

1. 먼저 사용하기 위해서는 using System.IO;를 선언해야합니다.
2. Path객체를 특별히 따로 선언해서 사용하는 것이아니라, static 메서드를 활용하여 경로부분을 원하는데로 다룰 수 있게 됩니다.

Path.ChangeExtension(string path) : 경로문자열에서 확장명 부분을 변경합니다.
Path.GetDirectoryName(string path) : 경로문자열에서 파일이름을 제외한 경로부분(디렉터리명)을 반환 합니다.
Path.GetExtension(string path) : 경로문자열에서 확장명 부분만 반환합니다.
Path.HasExtension(string path) : 경로문자열에서 확장명 부분이 있는지 확인하여 bool값으로 반환합니다.

Path.GetFileName(string path) : 경로문자열에서 파일이름부분을 반환합니다.
Path.GetFileNameWithoutExtension(string path) : 경로문자열에서 확장명부분을 제외한 파일이름을 반환합니다.
Path.GetFullPath(string path) : 경로문자열에 해당하는 절대경로를 반환합니다.
Path.GetPathRoot(string path) : 경로문자열에서 루트디렉터리(드라이브 명) 부분만 반환합니다.
Path.GetRandomFileName() : 파일 또는 폴더명으로 사용가능한 임의의 문자열을 반환합니다.
Path.GetTempFileName() : 임의로 임시파일을 생성 후, 생성된 임시파일의 경로를 반환합니다. 임시파일은 시스템의 지정된 임시폴더(Temp)에 생성됩니다.
Path.GetTempPath() : 시스템에 지정된 임시폴더의 경로를 반환합니다.
Path.IsPathRooted(string path) : 매개변수로 지정된 경로문자열이 상대경로인지 절대경로인지 파악하여 bool값으로 반환합니다. 절대경로이면 true를 반환합니다.
Path.GetInvalidFileNameChars() : 파일이름으로 부적합한 문자들의 배열을 반환합니다.
Path.GetInvalidPathChars() : 경로명으로 부적합한 문자들의 배열을 반환합니다.

 

'프로그램 > C#' 카테고리의 다른 글

C# MDI 폼안에 폼 띵우기  (0) 2013.03.12
C# 폼 투명하게 하기  (0) 2013.03.12
C# 메모리 줄이기, 메모리 강제회수  (0) 2013.03.08
C# 웹 검색  (0) 2013.03.08
C# 키 이벤트 ...  (0) 2013.03.08
프로그램/C# 2013. 3. 8. 02:08

C# 메모리 줄이기, 메모리 강제회수




using System.Runtime.InteropServices; 

 
 

        #region 강제 메모리 회수 

        [DllImportAttribute("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet = 

CharSet.Ansi, SetLastError = true)] 

        private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int 

maximumWorkingSetSize); 

        public static void FlushMemory() 
        { 

            GC.Collect(); 

            GC.WaitForPendingFinalizers(); 

            if (Environment.OSVersion.Platform == PlatformID.Win32NT) 
            { 

                SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1); 
            } 

        } 

        #endregion 



'프로그램 > C#' 카테고리의 다른 글

C# 폼 투명하게 하기  (0) 2013.03.12
C# 파일경로  (0) 2013.03.08
C# 웹 검색  (0) 2013.03.08
C# 키 이벤트 ...  (0) 2013.03.08
C# try - catch 예외 처리  (0) 2013.03.08
프로그램/C# 2013. 3. 8. 02:07

C# 웹 검색



//웹페이지 여는 함수 
  private void OpenWebPage(string uri) 
        { 
            System.Diagnostics.Process process = new System.Diagnostics.Process(); 
            process.StartInfo.FileName = uri; 
            process.Start(); 
        } 



        private void Searchgo_Click(object sender, EventArgs e) 
        { 
            StringBuilder str = new StringBuilder(); 
            // Append로 지정된 문자열의 복사본을 이 인스턴스의 끝에 추가 
            str.Append(textBox1.Text); 
          
            if (comboBox1.SelectedIndex == 0) 
            { 
                // textBox에 글자가 입력이 안되었을때.. 
                if (textBox1.Text == "") 
                    OpenWebPage("http://www.daum.net/"); 
                
                else 
                    OpenWebPage("http://search.daum.net/search?nil_suggest=btn&nil_ch=&rtupcoll=&w=tot&m=&lpp=&q=" + str.ToString()); 
            } 


            if (comboBox1.SelectedIndex == 1) 
            { 
                // textBox에 글자가 입력이 안되었을때 
                if (textBox1.Text == "") 
                    OpenWebPage("http://www.naver.com/"); 
            
                else  
                    OpenWebPage("http://search.naver.com/search.naver?sm=tab_hty&where=nexearch&query=" + str.ToString() + "&lr=&aq=f");                    
            } 
            if (comboBox1.SelectedIndex == 2) 
            { 
                // textBox에 글자가 입력이 안되었을때 
                if (textBox1.Text == "")                    
                    OpenWebPage("http://www.google.co.kr/"); 
                
                else 
                    OpenWebPage("http://www.google.co.kr/search?complete=1&hl=ko&q=" + str.ToString());                    
            } 
        } 





'프로그램 > C#' 카테고리의 다른 글

C# 파일경로  (0) 2013.03.08
C# 메모리 줄이기, 메모리 강제회수  (0) 2013.03.08
C# 키 이벤트 ...  (0) 2013.03.08
C# try - catch 예외 처리  (0) 2013.03.08
C# 소스코드 작성법  (0) 2013.03.08
프로그램/C# 2013. 3. 8. 02:06

C# 키 이벤트 ...



private void search_Text_Box_KeyPress(object sender, KeyPressEventArgs e) 
        { 
//텍스트 박스에 키가 눌러 지면 그키가 엔터인지 확인 
            if (e.KeyChar ==(char)Keys.Enter) 
            { 
                search_button_Click(sender, e); 
                //search_button.Focus(); 
            } 
        } 



'프로그램 > C#' 카테고리의 다른 글

C# 메모리 줄이기, 메모리 강제회수  (0) 2013.03.08
C# 웹 검색  (0) 2013.03.08
C# try - catch 예외 처리  (0) 2013.03.08
C# 소스코드 작성법  (0) 2013.03.08
C# 줄바꿈 캐리지리턴과 라인피드 정리  (0) 2013.03.08
프로그램/C# 2013. 3. 8. 02:03

C# 소스코드 작성법

* 프로그램 작성 방법 통일


1. 각 개발자는 매개변수 리스트(parameter list)를 작성할 것

각 함수들의 문서화
(1) 목적, (2) 입력과 출력, (3) 주석문을 작성
용이한 관리를 위해 (a) 소스 코드 디렉토리와 (b) 빌드 디렉토리를 따로 관리한다.


2. 코딩 스타일
- 배 열 크 기 : #define으로 정의
- 함수명 작성 : 함수명 바로 앞은 대문자로 시작

- 매 개 변 수 : input, output을 반드시 적을 것

- 포인터를 나타내는 '*'는 변수형에 붙이지 말고, 변수명에 앞에 부착 할 것
예) char *s, *t, *u; (권장)

- 조건문 작성 시
if (f()) <- (금지)
if (f() != FAIL) <- (권장)

- 접두어 작성 시 기본 타입
타입 접두어

boolean b 
short s 
float f 
byte byt 
int i 
double d 
char c 
long l 
pointer(*) p 
String str 
Thread trd 
Vector vec 
Array ary 
Container con 
Date dat 
Object obj 
Component com 
Calendar cal 

- 윈도우 툴킷 
타입 접두어 
Layout lay 
Button btn 
Canvas can 
Checkbox chk 
Choice cbo 
Color col 
Cursor cur 
Dialog dlg 
Dimension dim 
Event evt 
Font fnt 
FontMetrics fm 
Frame frm 
Graphics grp 
Image img 
Label lbl 
List lst 
MediaTracker mt 
Menu men 
Panel pan 
Rectangle rect 
Scrollbar sb 
TextArea txt 
TextField txt 
Toolkit tk 
Window win 
Exception ex 


 

 


3. 참고 URL
- http://blog.naver.com/whyryan?Redirect=Log&logNo=150009802529
- http://cafe.naver.com/mobilenjoy.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2165

프로그램/C# 2013. 3. 8. 02:03

C# 줄바꿈 캐리지리턴과 라인피드 정리

줄바꿈 문자 에러가 종종 발생한다.  아래와 같이 정리 하면 하나의 문자"\r"만 남개 된다?? ㅋ 

String.Replace("\n", "\r\n").Replace("\r", "")

캐리지 리턴은  현재 출력 줄의 맨 앞으로 옮기것이다.

라인피드는 현재 출력 위치에서 다음 줄로 옮기는 것이다.

 

 

C에서 코드는  \r, \n 입니다.

도스 계열     캐리지 리턴     \r\n

라인피드         \r\n

 

유닉스 계열  캐리지 리턴     \n

라인피드         \n

맥 계열        캐리지 리턴     \r

라인피드        \r

'프로그램 > C#' 카테고리의 다른 글

C# try - catch 예외 처리  (0) 2013.03.08
C# 소스코드 작성법  (0) 2013.03.08
C# 텍스트 배열에 나눠 넣기  (0) 2013.03.08
C# 끌어놓기 드래그 앤 드롭 (수정 필요)  (0) 2013.03.08
C# 외부 프로그램 실행  (0) 2013.03.08
프로그램/C# 2013. 3. 8. 01:50

C# 끌어놓기 드래그 앤 드롭 (수정 필요)


#region 드래그앤 드롭 
      
        bool QueryContununeDragCanel; 
      
        private void 새로열기ToolStripMenuItem_Click(object sender, EventArgs e) 
        { 
            if (새로열기ToolStripMenuItem.Checked == true) 
                추가하기ToolStripMenuItem.Checked = false; 
            else 
                새로열기ToolStripMenuItem.Checked = true; 
        } 

        private void 추가하기ToolStripMenuItem_Click(object sender, EventArgs e) 
        { 
            if (추가하기ToolStripMenuItem.Checked == true) 
                새로열기ToolStripMenuItem.Checked = false; 
            else 
                추가하기ToolStripMenuItem.Checked = true; 
        } 

        private void richTextBox1_QueryContununeDrag(object sender, QueryContinueDragEventArgs e) 
        { 
            if(QueryContununeDragCanel == true) 
            e.Action = DragAction.Cancel; 
        } 

        private void richTextBox1_DragEnter(object sender, DragEventArgs e) 
        { 
            if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
            { 
                e.Effect = DragDropEffects.Copy | DragDropEffects.Scroll; 
            } 
        } 

        private void richTextBox1_DragDrop(object sender, DragEventArgs e) 
        { 
            
          
            if (새로열기ToolStripMenuItem.Checked == true | TextChangeCheck == true)//새로열기체크와  텍스트가 변경 되었으면 
            {        
                DialogResult result = MessageBox.Show(this.Text + " 파일의 내용이 변경되었습니다." + Environment.NewLine + Environment.NewLine + "변경된 내용을 저장하시겠습니까?", "QA4B", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); 
                switch (result)//메세지박스의 result값을 받아와서 비교합니다. 
                {              
                    case DialogResult.Yes://메세지 박스에서 예를 누르면... 
                            FileSave(); 

                            if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
                            { 
                                string[] file = (string[])e.Data.GetData(DataFormats.FileDrop); 
                                foreach (string str in file) 
                                { 

                                    richTextBox1.Text = File.ReadAllText(str, Encoding.Default); 
                                    fname = str; 
                                    TextChangeCheck = false; 
                                    //제목 표시 
                                    int titlename = str.LastIndexOf("\\"); 
                                    this.Text = str.Substring(titlename + 1); 
                                } 
                            } 
                            break; 

                        case DialogResult.No://메세지 박스에서 아니오를 누르면...                          
                            if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
                            { 
                                string[] file = (string[])e.Data.GetData(DataFormats.FileDrop); 
                                foreach (string str in file) 
                                { 

                                    richTextBox1.Text = File.ReadAllText(str, Encoding.Default); 
                                    fname = str; 
                                    TextChangeCheck = false; 
                                    //제목 표시 
                                    int titlename = str.LastIndexOf("\\"); 
                                    this.Text = str.Substring(titlename + 1); 

                                } 
                            } 
                            
                            break; 

                        case DialogResult.Cancel://메세지 박스에서 아니오를 누르면... 
                            QueryContununeDragCanel = true;//그래그 앤 드롭 이벤트 취소 
                            break; 
                    } 
                } 
          

        } 
        #endregion 






'프로그램 > C#' 카테고리의 다른 글

C# 줄바꿈 캐리지리턴과 라인피드 정리  (0) 2013.03.08
C# 텍스트 배열에 나눠 넣기  (0) 2013.03.08
C# 외부 프로그램 실행  (0) 2013.03.08
C# 폼 상속  (0) 2013.03.08
C# 난수 생성 , rand Random  (0) 2013.03.08
프로그램/C# 2013. 3. 8. 01:50

C# 외부 프로그램 실행




윈도우를 종료 
System.Diagnostics.Process.Start("cmd.exe","ShutDown.exe -s -f -t 00"); 


윈도우를 재부팅 

System.Diagnostics.Process.Start("cmd.exe","ShutDown.exe -r -f -t 00"); 



특정 폴더 열기 
System.Diagnostics.Process.Start("explorer.exe", "C:\Temp"); 

특정 사이트 열기 
System.Diagnostics.Process.Start("explorer.exe", "http://www.naver.com"); 



도스명령어 실행 

System.Diagnostics.Process.Start("cmd.exe","/c dir"); 

// cmd 옵션에 대해 더 알고싶으면.. c:>help cmd 
Process.Start 메서드 사용형식 using System.Diagnostics; //System.Diagnostics 네임스페이스는 시스템 프로세스, 이벤트 로그 및 성능 카운터와 상호 작용할 수 있는 클래스를 제공합니다. public bool Start(); //이 Process 구성 요소의 StartInfo 속성으로 지정된 프로세스 리소스를 시작하거나 다시 사용하여 구성 요소에 연결합니다.

Process myProcess = new Process(); 
string myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
myProcess.StartInfo.FileName = myDocumentsPath + "\MyFile.doc"; 
myProcess.StartInfo.Verb = "Print"; 
myProcess.StartInfo.CreateNoWindow = true; 
myProcess.Start(); 


public static Process Start( ProcessStartInfo startInfo); // ProcessStartInfo : 파일 이름 및 모든 명령줄 인수를 포함하여 프로세스를 시작하는 데 사용되는 정보 // 시작할 프로세스의 파일 이름 같은 프로세스 시작 정보가 포함된 매개 변수에 의해 지정된 // 프로세스 리소스를 시작하고 해당 리소스를 새 Process 구성 요소에 연결합니다
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); 
startInfo.WindowStyle = ProcessWindowStyle.Minimized; 
startInfo.Arguments = "www.naver.com"; 
Process.Start(startInfo); 


public static Process Start(string fileName); // fileName : 프로세스에서 실행될 응용 프로그램 파일 이름입니다. //문서 또는 응용 프로그램 파일 이름을 지정하여 프로세스 리소스를 시작하고 해당 리소스를 새 Process 구성 요소에 연결합니다

Process.Start("IExplore.exe"); 

public static Process Start(string fileName, string arguments); // arguments : 프로세스를 시작할 때 전달할 명령줄 인수입니다 //응용 프로그램 이름 및 명령줄 인수 집합을 지정하여 프로세스 리소스를 시작하고 해당 리소스를 새 Process 구성 요소에 연결합니다.

Process.Start("IExplore.exe", "C:\myPath\myFile.htm"); 
Process.Start("IExplore.exe", "C:\myPath\myFile.asp"); 



Process 클래스 Process 구성 요소는 컴퓨터에서 실행 중인 프로세스에 대한 액세스를 제공합니다. 간단히 말해 프로세스란 실행 중인 응용 프로그램을 말합니다. Process 구성 요소는 응용 프로그램의 시작, 중지, 제어 및 모니터링을 위한 유용한 도구입니다. Process 구성 요소를 사용하면 실행 중인 프로세스의 목록을 얻거나 새로운 프로세스를 시작할 수 있습니다. 또한 Process 구성 요소를 사용하여 시스템 프로세스에도 액세스할 수 있습니다. Process 구성 요소를 초기화한 후에는 해당 구성 요소를 사용하여 실행 중인 프로세스에 대한 정보를 얻을 수 있으며 그러한 정보에는 스레드 집합, 로드된 모듈(.dll 및 .exe 파일), 프로세스가 사용하고 있는 메모리 양과 같은 성능 정보 등이 포함됩니다. 프로세스 구성 요소는 속성 그룹에 대한 정보를 한 번에 가져옵니다. Process 구성 요소가 특정 그룹의 한 멤버에 대한 정보를 가져올 때 해당 그룹의 나머지 속성 값이 캐싱되므로 Refresh 메서드를 호출하지 않는 한 그룹의 다른 멤버에 대한 새로운 정보를 가져오지 않습니다. 따라서 속성 값이 Refresh 메서드를 마지막으로 호출하여 얻은 속성 값과 같을 수 있습니다. 이러한 그룹 명세는 운영 체제에 따라 다릅니다. 출처 http://blog.daum.net/starkcb/128

'프로그램 > C#' 카테고리의 다른 글

C# 텍스트 배열에 나눠 넣기  (0) 2013.03.08
C# 끌어놓기 드래그 앤 드롭 (수정 필요)  (0) 2013.03.08
C# 폼 상속  (0) 2013.03.08
C# 난수 생성 , rand Random  (0) 2013.03.08
C# 폼스타일 , FormBorderStyle  (0) 2013.03.08
프로그램/C# 2013. 3. 8. 01:48

C# 폼 상속



폼2 
 public partial class charextract : Form 
    { 
        Form1 f1; 
        public charextract(Form1 frm) 
        { 
            InitializeComponent(); 
            f1 = frm; 
        } 


폼1 
charextract frm = new charextract(this); 
            frm.Show(); 




'프로그램 > C#' 카테고리의 다른 글

C# 끌어놓기 드래그 앤 드롭 (수정 필요)  (0) 2013.03.08
C# 외부 프로그램 실행  (0) 2013.03.08
C# 난수 생성 , rand Random  (0) 2013.03.08
C# 폼스타일 , FormBorderStyle  (0) 2013.03.08
C# 접근 수정자  (0) 2013.03.08
프로그램/C# 2013. 3. 8. 01:44

C# 난수 생성 , rand Random

난수라는 것은 연속적이지 않는 수를 말하는 것으로 System네임스페이스의 Random클래스를 사용합니다. 구체적으로 설명하美? 먼자 Random클래스를 인스턴스로 만들고 Next메소드를 호출하는 방식을 추천합니다.

만약, 0~99까지 랜덤한 정수를 1개를 얻고자 싶다면,

Random rd = new Random(); 
int rNum = rd.Next(100); 

이후 Next메소드를 호출할 때마다 다른 수를 얻을 수 있고 NextDouble메소드를 사용하면 0.0~0.1사이의 double형 난수를 생성합니다.

 

그러나, Random 클래스를 사용시 주의해야할 점이 있습니다. 이는 컴퓨터로 난수를 생성하는 경우, 지정한 수치를 시드값으로 정하고 이를 기초로 특정연산을 통해 난수를 만들어갑니다. 이때문에 동일한 시드값을 사용한 경우 발생한 난수는 완전히 동일한 것으로 됩니다.

 

Random클래스의 이벤트핸들로를 사용하여 인스턴스를 만들면, 그 시드값에는 Environment클래스의 TickCount속성을 사용합니다. 이 속성은 PC를 마지막으로 실행하고 나서 지난 시간을 리턴합니다. 이 때문에 연속하고 여러개의 Random클래스 인스턴스를 만들면, 시드값이 동일한 인스턴스를 만들어버릴 수 있습니다. 여기서는 이러한 오류가 발생하지 않도록 처리한 예제입니다.

 

using System; 

public class RandomExam1 { 
 static void Main() { 
  for(int i=0; i<50; i++) { 
  Random rd = new Random(); 
  for(int j=0; j<10; j++) { 
    Console.Write("{0} ", rd.Next(10,100)); 
  } 
  Console.WriteLine(Environment.TickCount); 
  } 
 } 
} 

 

실행된 출력된 내용을 보면 다른 인스턴스임에도 불구하고 동일한 난수를 생성해버리는 것을 확인하실 수 있을 겁니다. 이와 같이 난수는 위에서도 이야기했듯히 문제의 소지가 있습니다.

이런 경우를 대비하여 시드값을 지정할 수 있는 버전으로 변경하여 다음과 같이 개선하였습니다.

 

using System; 

public class RandomExam2 { 
 static void Main() { 
  int seed = Environment.TickCount; 
  for(int i=0; i<50; i++) { 
  Random rd = new Random(seed++); 
  for(int j=0; j<10; j++) { 
    Console.Write("{0} ", rd.Next(10,100)); 
  } 
  Console.WriteLine(); 
  } 
 } 
} 

 

위 예제는 시드값을 1씩 늘리는 만큼 난수를 발생시키는 구조입니다.

 

만약 보다 상세한 난수를 생성하고 싶은 분들은 암호화를 사용하여 난수열을 만드는 형태로 System.Security.Cryptography네임스페이스의 RNGCryptoServiceProvider클래스를 사용하거나 RandomNumberGenerator클래스를 사용할 수 있습니다.

이 클래스의 GetBytes메소드나 GetNonZeroByte메소드를 사용하여 바이트배열 난수열을 발생시킵니다. 

byte[] r = new byte[100]; 
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider() 
rng.GetBytes(r); 

 

[출처] C# 난수 생성 방법|작성자 메모리얼  Writter by Youngil Kim, C#.NET Developer

 

'프로그램 > C#' 카테고리의 다른 글

C# 외부 프로그램 실행  (0) 2013.03.08
C# 폼 상속  (0) 2013.03.08
C# 폼스타일 , FormBorderStyle  (0) 2013.03.08
C# 접근 수정자  (0) 2013.03.08
C# 데이터 타입  (0) 2013.03.08