텍스트 파일에 쓰는 방법(C# 프로그래밍 가이드)
이 문서에는 파일에 텍스트를 쓰는 다양한 방법을 보여 주는 몇 가지 예제가 있습니다. 처음 두 예제에서는 System.IO.File 클래스의 정적 편의 메서드를 사용하여 IEnumerable<string>
의 각 요소와 string
을 텍스트 파일에 씁니다. 세 번째 예제에서는 파일에 쓸 때 각 줄을 개별적으로 처리해야 하는 경우 파일에 텍스트를 추가하는 방법을 보여 줍니다. 처음 세 예제에서는 파일의 모든 기존 콘텐츠를 덮어씁니다. 마지막 예제에서는 기존 파일에 텍스트를 추가하는 방법을 보여 줍니다.
이 예에서는 파일에 모든 문자열 리터럴을 작성합니다. 파일에 작성된 텍스트의 서식을 지정하려면 Format 메서드 또는 C# 문자열 보간 기능을 사용합니다.
파일에 문자열 컬렉션 쓰기
class WriteAllLines
{
public static async Task ExampleAsync()
{
string[] lines =
{
"First line", "Second line", "Third line"
};
await File.WriteAllLinesAsync("WriteLines.txt", lines);
}
}
이전 소스 코드 예제는 다음과 같습니다.
세 개 값이 있는 문자열 배열을 인스턴스화합니다.
다음과 같은 File.WriteAllLinesAsync 호출을 기다립니다.
- 파일 이름 WriteLines.txt를 비동기적으로 만듭니다. 파일이 이미 있으면 덮어씁니다.
- 지정된 줄을 파일에 씁니다.
- 파일을 닫아 필요에 따라 자동으로 플러시하고 삭제합니다.
파일에 하나의 문자열 쓰기
class WriteAllText
{
public static async Task ExampleAsync()
{
string text =
"A class is the most powerful data type in C#. Like a structure, " +
"a class defines the data and behavior of the data type. ";
await File.WriteAllTextAsync("WriteText.txt", text);
}
}
이전 소스 코드 예제는 다음과 같습니다.
할당된 문자열 리터럴이 제공된 문자열을 인스턴스화합니다.
다음과 같은 File.WriteAllTextAsync 호출을 기다립니다.
- 파일 이름 WriteText.txt를 비동기적으로 만듭니다. 파일이 이미 있으면 덮어씁니다.
- 지정된 텍스트를 파일에 씁니다.
- 파일을 닫아 필요에 따라 자동으로 플러시하고 삭제합니다.
파일에 배열에서 선택한 문자열 쓰기
class StreamWriterOne
{
public static async Task ExampleAsync()
{
string[] lines = { "First line", "Second line", "Third line" };
using StreamWriter file = new("WriteLines2.txt");
foreach (string line in lines)
{
if (!line.Contains("Second"))
{
await file.WriteLineAsync(line);
}
}
}
}
이전 소스 코드 예제는 다음과 같습니다.
- 세 개 값이 있는 문자열 배열을 인스턴스화합니다.
- WriteLines2.txt의 파일 경로를 using 선언으로 사용하여 StreamWriter를 인스턴스화합니다.
- 모든 줄을 반복합니다.
- 줄에
"Second"
가 포함되지 않은 경우 해당 줄을 파일에 쓰는 StreamWriter.WriteLineAsync(String) 호출을 조건에 따라 기다립니다.
기존 파일에 텍스트 추가
class StreamWriterTwo
{
public static async Task ExampleAsync()
{
using StreamWriter file = new("WriteLines2.txt", append: true);
await file.WriteLineAsync("Fourth line");
}
}
이전 소스 코드 예제는 다음과 같습니다.
- 세 개 값이 있는 문자열 배열을 인스턴스화합니다.
- WriteLines2.txt의 파일 경로를 using 선언으로 사용하여 StreamWriter를 인스턴스화하고 추가할
true
를 전달합니다. - 문자열을 파일에 추가된 줄로 쓰는 StreamWriter.WriteLineAsync(String) 호출을 기다립니다.
예외
다음 조건에서 예외가 발생합니다.
- InvalidOperationException: 파일이 있지만 읽기 전용인 경우
- PathTooLongException: 경로 이름이 너무 긴 경우
- IOException: 디스크가 꽉 찬 경우
파일 시스템을 사용하는 경우 예외를 발생시킬 수 있는 추가 조건이 있습니다. 방어적으로 프로그래밍하는 것이 좋습니다.