C# - 파일을 열고 쓰는 방법에 대해 알아보자. (파일 열기,읽기,쓰기,저장)

반응형

반년만에 쓰는 씨샵 관련 글인 것 같다.

사실 해당 관련 내용은 이미 1년 전부터 글을 쓸까 말까 하다가

너무 귀찮아서 미루고 미루다가 이제서야 글을 쓴다.

 

씨샵 언어를 이용하여 파일을 열어서 읽고,

지정한 파일에 내가 작성한 내용을 쓰기(저장)를 하려면 어떻게 해야할까?

 

오늘은 씨샵에서 파일을 읽고 쓰는 방법에 대해 다뤄보자.

 

씨샵에서 파일을 읽고 쓰려면?

파일을 읽고 쓰려면 StreamReaderStreamWriter가 필요하다.

StreamReader는 말 그대로 스트림 데이터를 읽을 수 있도록 해주는 클래스이고,

StreamWriter는 스트림 데이터를 쓸 수 있도록 해주는 클래스이다.

 

이는 즉, 파일을 쉽게 읽고 저장해주는 역할을 한다.

 

스트림 리더로 텍스트 파일 읽기 (파일 열기)

먼저, StreamReader 객체를 생성하고 읽을 파일의 경로를 지정해야 한다.
그리고 ReadLine() 메서드를 사용하여 파일에서 한 줄씩 읽어온다.
파일 읽기가 끝나면 Close() 메서드를 사용하여 StreamReader 객체를 닫는다.

  • ReadLine() 메서드
    • 파일에서 한 줄을 읽어와 문자열로 반환하는 메서드
    • 파일의 끝에 도달하면 null 값 반환
// 읽어올 파일 경로 지정
string filePath = "C:\\example.txt"; 

// 스트림 리더 객체 생성
StreamReader reader = new StreamReader(filePath);

// 파일 읽기
string line;
while ((line = reader.ReadLine()) != null)
{
    Console.WriteLine(line); // 읽은 내용 콘솔에 출력
}

// 스트림 리더 객체 닫기
reader.Close();

 

스트림 라이터로 텍스트 파일 쓰기

StreamReader는 파일 읽기 전용 도구이다.

텍스트 파일을 쓰려면 StreamWriter 클래스를 사용해야 한다.
StreamWriter 사용법은 StreamReader와 매우 유사하다.

먼저, StreamWriter 객체를 생성하고 쓸 파일의 경로를 지정한다.
두 번째 매개변수가 true일 경우에는 파일에 내용을 추가하며, false일 경우에는 파일의 내용을 덮어쓴다.


그리고 WriteLine() 메서드를 사용하여 파일에 텍스트를 저장한다.
파일 쓰기가 끝나면 Close() 메서드를 사용하여 StreamWriter 객체를 닫는다.

  • WriteLine() 메서드
    • 파일에 텍스트를 쓰는 메서드
    • 두 번째 매개변수를 지정할 경우, 파일이 없으면 새 파일을 만든다.
// 읽어올 파일 경로 지정
string filePath = "C:\\example.txt"; 

// 스트림 라이터 객체 생성, true 옵션은 파일에 내용을 추가하겠다는 의미
StreamWriter writer = new StreamWriter(filePath, true);

// 파일 쓰기
writer.WriteLine("새로운 내용 추가");

// 스트림 라이터 객체 닫기
writer.Close();

 

실제로 구현해보기

파일을 불러올 버튼과 파일을 저장할 버튼을 만들어서 코드를 구성해보자.

 

파일 읽기 (파일 불러오기)

// 파일 불러오기
private void btnRead_Click(object sender, EventArgs e)
{
    // 텍스트를 표시할 텍스트박스 초기화
    txtContent.Text = "";
    
    // 기본 경로 : 프로젝트 실행 경로를 기준으로 함
	string basePath = Environment.CurrentDirectory;

    // 불러올 파일 경로 확인
    string filePath = basePath + "\\" + txtOriginPath.Text;

    // 파일 경로 유효성 확인
    if (File.Exists(filePath))
    {
        using (StreamReader reader = new StreamReader(filePath))
        {
            // 파일 읽기
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                txtContent.Text += line + Environment.NewLine; // 줄의 마지막이면 다음 줄로 이동
            }
        }
    }
}

 

파일 쓰기 (파일 저장하기)

// 파일 저장하기
private void btnSave_Click(object sender, EventArgs e)
{
    // 기본 경로 : 프로젝트 실행 경로를 기준으로 함
    string basePath = Environment.CurrentDirectory;

    // 저장할 파일 경로 확인
    string FilePath = basePath + "\\" + txtOriginPath.Text;

    // 저장할 파일 내용
    string content = txtContent.Text;

    // 파일 쓰기 : false (덮어쓰기)
    using (StreamWriter writer = new StreamWriter(FilePath, false))
    {
        writer.WriteLine(content);
    }
}

 

테스트

테스트에 사용될 파일

  • 경로 : 프로젝트 실행 경로/test1.txt (\bin\Debug\net8.0-windows)
  • 내용 : 테스트 파일입니다.

C# 파일 읽기/쓰기에 사용될 테스트 텍스트 문서 파일 예시 화면

 

파일 불러오기 테스트

  1. 파일 경로 입력 : test1.txt
  2. 파일 불러오기 버튼을 클릭하여 텍스트 문서 파일이 불러와지는지 확인

씨샵으로 만들어진 윈도우 프로그램에서 파일 불러오기 버튼을 눌러 텍스트 문서 파일을 불러온 예시 이미지

 

파일 저장 후 다시 불러오기

  1. 파일 경로 입력 : test1.txt
  2. 파일 불러오기 버튼 클릭
  3. 파일의 내용이 불러와져 있는 텍스트 박스에 파일 내용 수정
  4. 파일 저장하기 버튼 클릭
  5. 파일 불러오기 버튼을 클릭하여 저장한 내용을 다시 불러오는지 확인

씨샵으로 만들어진 윈도우 프로그램에서 파일 저장하기 버튼을 눌러 텍스트 문서 파일을 저장한 예시 이미지

 

내용을 조금 더 자세히 알고 싶다면?

 

이 글은 파일을 열고 저장하는 방법에 대해서 다루었다.

세부적인 설명이 필요하거나, 

추가로 파일을 복사 또는 이동하고, 삭제하는 방법을 자세히 알아보고 싶다면 아래의 링크를 참고하자.

 

실제 테스트에서 쓰인 프로젝트는 깃허브에서 다운 받을 수 있다.

반응형