C#으로 프로그램을 개발할 때 파일을 만들어 읽기, 쓰기, 삭제 등의 작업을 해야 하는 경우가 있습니다.
환경 변수를 만들어 텍스트 파일로 저장해 놓고 다음 프로그램 실행 시 해당 파일을 읽어 참조를 한다든지, 실행 결과를 텍스트 파일로 저장 한다든지 다양한 목적으로 닷넷 프로그램에서 파일을 만들어 사용하게 됩니다.
이번 글에서는 C#에서 간단하게 텍스트 파일을 만들고(Create) 텍스트를 쓰는(Write) 방법과 기존 파일에 텍스트를 추가(Append)하는 방법에 대해 알아보겠습니다.
C#에서 파일을 생성하고 텍스트를 쓰기(Write) 하는 방법
C#에서 파일을 다루기 위해서는 using System.IO;를 먼저 선언해 주는 것이 코딩 작성에 편리합니다.
- WriteAllText를 사용하면 텍스트가 파일의 한 라인으로 쓰여지게 됩니다.
- WriteAllLines를 사용하면 파일에 여러 행의 텍스트를 쓸 수가 있습니다.
- StreamWriter를 사용하면 좀 더 다양한 옵션으로 파일에 텍스트를 쓸 수가 있습니다.(WriteLine 대신 Write를 쓰게되면 AppendAllText와 같은 기능을 하게 됩니다.)
//파일을 만들고 문자열을 파일에 추가함
File.WriteAllText(@“C:\Temp\jujun1.txt”, “안녕하세요. 느티나무 지식창고입니다.”);
//파일을 만들고 여러 행의 문자열을 파일에 추가함
var lines = new List<string>();
lines.Add(“안녕하세요”);
lines.Add(“느티나무 지식창고입니다.”);
// var lines = new List<string>() {“안녕하세요”, “느티나무 지식창고입니다.”};
File.WriteAllLines(@“C:\Temp\jujun2.txt”, lines);
//StreamWriter를 사용하여 파일을 만들고 여러 행의 문자열를 추가함
using (StreamWriter writer = File.CreateText(@“C:\Temp\jujun3.txt”))
{
writer.WriteLine(“안녕하세요.”);
writer.WriteLine(“느티나무 지식창고입니다.”);
writer.WriteLine(“만나서 반갑습니다.”);
}
|
▼ 아래 화면은 위의 C# 소스를 실행했을 때 만들어진 텍스트 파일과 파일에 쓰여진 내용입니다.
폴더(디렉터리)를 먼저 만든 다음 파일을 만들고 텍스트를 쓰는 방법
C#에서 파일을 만들 때 생성하는 파일의 경로(디렉터리 경로)가 올바르지 않을 때 오류가 발생하게 됩니다.
오류 내용: “System.IO.DirectoryNotFoundException: ‘…….’ 경로의 일부를 찾을 수 없습니다.“
DirectoryNotFoundException 오류는 저장하려는 파일의 경로가 현재 존재하지 않아 발생하는 예외 오류 입니다.
위와 같은 오류가 발생할 때는 디럭터리(폴더)를 먼저 만들어 주고 파일을 생성하면 오류 없이 처리됩니다.
디렉터리의 존재 여부를 고민할 필요 없이 무조건 디럭터리를 만드는 로직은 선행해서 구현해 주는 것을 추천합니다.
//폴더(디렉터리)가 없는 경우 폴더를 먼저 만들고 그 다음 파일을 만들고 문자열을 파일에 추가함
var filePath = @“C:\Temp\Temp2\jujun4.txt”;
//File.WriteAllText(filePath, “안녕하세요. 느티나무 지식창고입니다.”);
var directory = Path.GetDirectoryName(filePath); //filePath에 있는 디렉터리만 가져옴
Directory.CreateDirectory(directory); //디렉터리를 만들어 줌
File.WriteAllText(filePath, “안녕하세요. 느티나무 지식창고입니다.”);
|
C#에서 기존 파일에 텍스트를 추가(Append)하는 방법
▼ 아래 로직은 기존 파일에 텍스트를 추가하는 방법에 대한 기술입니다.
- AppendAllText는 기존 텍스트의 끝에 새로운 텍스트를 추가하게 되고,
- AppendAllLines는 기존 텍스트의 라인 다음에 다시 새로운 행으로 추가하게 되고,
- FileStream과 StreamWriter 역시 기존 텍스트의 라인 다음에 새로운 행으로 텍스트가 추가됩니다.(WriteLine 대신 Write를 쓰게되면 AppendAllText와 같은 기능을 하게 됩니다.)
// 기존 파일에 문자열 추가
File.AppendAllText(@“C:\Temp\jujun1.txt”, “jujun.tistory.com”);
// 기존 파일에 여러 행의 문자열 추가
lines = new List<string>() { “jujun.tistory.com”, “Have a good day” };
File.AppendAllLines(@“C:\Temp\jujun2.txt”, lines);
// StreamWriter를 사용하여 기존 파일에 여러 행의 문자열 추가
using (FileStream fs = new FileStream(@“C:\Temp\jujun3.txt”, FileMode.Append, FileAccess.Write))
using (StreamWriter writer = new StreamWriter(fs))
{
writer.WriteLine(“jujun.tistory.com.”);
writer.WriteLine(“Have a nice day.”);
}
|
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^