티스토리 뷰

반응형



프로그래밍을 하다보면

컨피그 파일등 텍스트 파일을 읽어서

작업을 해야할 일이 종종 생기곤한다.

오늘은 C#으로 파일을 핸들링 하는

아주 기본적인 방법에 대해서

짧게 포스팅 해볼까 한다.


우선 텍스트 파일을 읽기 위해서

StreamReader

란 클래스를 이용할건데

C#에서는 StreamReader 클래스를 이용해서

너무나도 간단히 텍스트 파일을 읽어올 수가 있는데

이것을 MS가 좋아하는 방식으로 표현하자면

아주 강력한 프로그래밍 기능을 제공하고 있다고 할 수 있다. ㅎㅎㅎ

각설하고....

아래 예제를 보도록 하자.

using System.IO;

먼저 StreamReader 클래스는 네임스페이스 System.IO를 사용해야하기 때문에 위와 같은 using코드 한줄이 필요하다.

그리고 읽어올 텍스트 파일이 하나 필요한데...

일단

1234

가나다라

ABCD

와 같은 내용을 담은 ReadTest.txt파일을 하나 생성해 주도록 하자.

나같은 경우는 솔루션 폴더 안에 프로젝트 파일 안에 bin 폴더안에 debug폴더 안에 conf란 폴더에 위치시켰다.

다시말해 전체 경로는 다음과 같이 임의로 정하였다.

C:\Users\dev\c#\ConsoleApp1\ConsoleApp6\bin\Debug\conf\ReadTest.txt

그냥 위 경로는 별 뜻은 없고 그냥 내맘대로 정한거니 신경쓰지 않아도 됨. ㅎ

그 다음으로는 다음과 같은 코드를 작성해 주면 된다.(코드 예제는 MS 도큐먼트 사이트에서 발췌.)


int counter = 0;
string line;  

// Read the file and display it line by line.  

System.IO.StreamReader file =   

    new System.IO.StreamReader(System.Environment.CurrentDirectory+@"\conf\ReadTest.txt");  

while((line = file.ReadLine()) != null)  

{  
    System.Console.WriteLine(line);  

    counter++;  
}  

file.Close();  

System.Console.WriteLine("There were {0} lines.", counter);  

// Suspend the screen.  

System.Console.ReadLine();

참고로 내가 debug폴더 하위에 폴더를 만들고 읽어올 파일을 넣은것은

"System.Environment.CurrentDirectory"를 사용하기 위함인데 현재 디렉토리를 알려주기 때문에

FullPath를 사용하지 않고도 코드작성이 가능해서이다.(별 뜻없다고 했으나... 별 뜻있었네...)

참고로 Winform에서 개발하고 있다면

"Application.StartupPath"도 같은 결과를 가져오게되니 참고.

다시 본론으로 돌아와서....

위 코드는 너무 간단해서 설명할것도 별로 없어보이지만

중요한 것만 짚어본다면

System.IO.StreamReader file =   

    new System.IO.StreamReader(System.Environment.CurrentDirectory+@"\conf\ReadTest.txt");  

StreamReader를 file이란 변수명으로 선언하고 현재 디렉토리에 있는 읽어올 파일을 준비한다.

while((line = file.ReadLine()) != null)  

{  
    System.Console.WriteLine(line);  

    counter++;  
}  

파일에 읽어올 line이 null이 될때까지 반복해서 읽어서 콘솔에 출력하고

읽어올 행을 counter변수에 하나씩 더해서 저장한다.

file.Close();  

System.Console.WriteLine("There were {0} lines.", counter);

열어뒀던 StreamReader를 닫고 몇행을 읽었는지 출력한다.

정도면 설명이 끝날듯 한다.

그리고 위 코드를 실행하면 어떤 같은 결과가 나올까?

결과는 다음과 같다.

1234

???????

abcd

There were 3 lines.


계속하려면 아무 키나 누르십시오 . . .

읭?

한글이 깨짐..... ㅠㅠ

그래서 이 부분을 수정...

그리고 StreamReader를 선언한 다음 close해줘야 하는 번거로움을 조금이라도 줄이기 위해

최종적으로 다음과 같이 코드를 수정함.


int counter = 0;
string line;  

// Read the file and display it line by line.  

using(StreamReader sr = new StreamReader(System.Environment.CurrentDirectory + @"\conf\ReadTest.txt", Encoding.Default))
            {
                while ((line = sr.ReadLine()) != null)

                {
                    System.Console.WriteLine(line);

                    counter++;
                }
            }

System.Console.WriteLine("There were {0} lines.", counter);  

// Suspend the screen.  

System.Console.ReadLine();

이렇게 하면

결과는?

1234

가나다라

abcd

There were 3 lines.


계속하려면 아무 키나 누르십시오 . . .

한글 깨짐없이 정상적 출력.

파일에서 텍스트파일을 라인으로 읽어오는것은 이렇게 하면 되고...

그렇다면 텍스트파일로 쓰는건 어떻게하면 될까?

답은 StreamWriter 클래스를 사용하면 되는데... StreamReader와 거의 유사하게 사용이 가능하니

StreamWriter에 대해 찾아보지 않고 한번 생각나는대로 코딩을 해보는것도 재미있는 경험이 될 듯하다.

뭐... 분량조절에 항상 실패하다보니...

StreamWriter까지 이번에 소개하기는 좀 어려울 거 같고...

다음에 시간을 내서 StreamWriter 클래스 사용법도 정리하기로 하고

오늘은 끝~!





반응형
댓글
반응형
05-18 14:50
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함