본문 바로가기

.NET

[C#] 기본적인 파일 쓰기 및 읽기

텍스트 파일을 쓰고 읽는 것은 C#에서 뿐만 아니라 어느 언어, 프로그램을 사용하든 

한번 쯤은 사용하게 되는 기본사항이다. 따라서 어렵지도 않고 간단하니 한번 알아보자.

 

파일 한번에 쓰기

string file_path = @"C:\Users\user\Desktop\my_file.txt";
string[] lines = {"First Line", "Second Line", "Third Line"};

System.IO.File.WriteAllLines(file_path, lines);

파일 경로를 정해준다. 원하는 디렉토리 경로 끝에 .txt 확장자를 가진 파일 이름을 정해주면 파일을 쓰고 해당 이름으로 파일을 생성한다.

여러 형태로 쓸 수 있지만 이번엔 lines와 같이 배열로 써보겠다.

WriteAllLines() 함수를 통해 한번에 파일에 쓸 수 있다. 첫번째 인자는 파일의 경로이고 두번째 인자는 배열이 온다.

 

Microsoft 는 WriteAllLines() 함수가 파일을 닫는 작업까지 완료해주기 때문에 Flush() 나 Close() 작업을 하지 말라고 경고한다.

 

다음과 같이 하면 함수 한번의 호출로 파일을 한번에 써버리기 때문에 굉장히 편리하고 간단하다. 하지만 쓰고자 하는 배열이나 글에 조건을 걸어서 파일을 작성하고 싶다면 이 방식으로는 할 수가 없다.

그럴 때는 아래와 같은 방법을 써보자.

 

파일 원하는 조건을 걸어서 쓰기

using (System.IO.StreamWriter file = new System.IO.StreamWriter(file_path)) {
	foreach (string line in lines) {
    		if ("원하는 조건 작성") {
        		file.WriteLine(line);
        	}
    }
}

원하는 조건을 갖추어 파일을 작성하고 싶을 때는 StreamWriter를 사용해 file 이라는 객체를 만들어준다.

for문을 통해 배열을 하나씩 순회하고 if문으로 원하는 조건을 충족시킬 때만 한줄을 작성하는 WriteLine() 함수를 실행한다.

이런 방식을 사용하면 특정 키워드를 포함하는 줄만 작성하거나 하는 등의 작업을 할 수 있다.

 

파일 한번에 읽기

string file_path = @"C:\Users\user\Desktop\my_file.txt";
string text = System.IO.File.ReadAllText(file_path);

ReadAllText() 함수 호출 한번이면 된다.

파일 경로를 인자로 받고 모든 내용을 한 줄의 string 값으로 반환한다.

이렇게도 사용할 수는 있지만 보통의 경우에서 파일의 모든 내용을 한 줄짜리 string으로 만드는 경우가 많을까? 아래처럼 한 줄씩 읽어낼 수도 있다.

 

파일 한줄씩 읽기

string[] lines = System.IO.File.ReadAllLines(file_path);

foreach (string line in lines) {
	// Use line
}

다른 점이 하나도 없다. ReadAllText() 함수 대신 ReadAllLines() 함수를 사용하면 되고 이 함수는 string 배열을 반환한다. 이 배열을 한줄씩 뜯어서 사용하면 한줄씩 읽기가 되는 것이다. 매우매우 간단.