본문 바로가기

Programming

파일 입출력 : 쉽고 재미있는 C# Programming 의 기본

 

파일 입출력은 프로그래밍에서 중요한 개념 중 하나입니다.


 

1. 파일 입출력 개념

 

파일 입출력은 컴퓨터에서 데이터를 파일로 저장하고 파일에서 데이터를 읽는 과정을 의미합니다.

C#에서 파일 입출력을 수행하기 위해 'System.IO' 네임스페이스를 사용합니다.

이 네임스페이스에는 파일 및 스트림과 관련된 클래스들이 포함되어 있습니다.

 

a. 파일 입력 (File Input)

 

  • 파일 쓰기 (File Writing) : 프로그램이 데이터를 파일에 쓸 수 있습니다. 이를 통해 프로그램에서 생성한 정보를 파일에 저장할 수 있습니다.
  • 파일 쓰기 메서드 (File Writing Methods) : 파일을 쓰기 위한 여러 메서드가 있습니다. 이들 메서드를 사용하여 파일을 생성하고 데이터를 쓸 수 있습니다. C#에서는 'StreamWriter' 클래스를 주로 사용합니다.

 

b. 파일 출력 (File Output)

 

  • 파일 읽기 (File Reading) : 프로그램이 파일로부터 데이터를 읽어올 수 있습니다. 이를 통해 파일에 저장된 정보를 읽고 프로그램에서 사용할 수 있습니다.
  • 스트림(Stream) : 파일을 읽을 때 사용되는 개념으로, 데이터가 흐르는 통로를 의미합니다. 파일을 읽기 위해서는 파일로 부터 데이터를 읽어오는 스트림을 열어야 합니다.
  • 파일 읽기 메서드 (File Reading Methods) : 파일을 읽기 위한 여러 메서드가 있습니다. 이들 메서드를 사용하여 파일을 열고 데이터를 읽을 수 있습니다. C#에서는 'StreamReader' 클래스를 주로 사용합니다.

 

2. 주요클래스

 

a. FileStream 클래스 : 파일에서 바이트 스트림을 읽고 쓰기 위해 사용됩니다.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 파일을 읽기 위한 FileStream 생성
        using (FileStream fs = new FileStream("example.txt", FileMode.Open))
        {
            // 파일에서 바이트 단위로 읽기
            byte[] buffer = new byte[1024];
            int bytesRead = fs.Read(buffer, 0, buffer.Length);

            // 읽은 데이터 출력
            Console.WriteLine($"읽은 바이트 수: {bytesRead}");
            Console.WriteLine($"내용: {Encoding.UTF8.GetString(buffer)}");
        }
    }
}

* FileStream 클래스를 사용하여 파일을 열고 읽기 위한 'fs' 변수를 선언합니다.

* example.txt 파일을 읽기 모드(FileMode.Open)로 엽니다.

* using 문을 사용하여 파일을 사용한 후 자동으로 리소스를 해제하도록 합니다.

 

* Read 메서드를 사용하여 파일에서 바이트 단위로 읽어 옵니다.

* Read 메서드는 읽은 바이트 수를 반환하며, 이를 bytesRead 변수에 저장합니다.

 

* buffer 배열에 저장된 바이트 데이터를 UTF-8 형식의 문자열로 변환하여 출력합니다.

 

 

b. 'StreamReader' 클래스 :  파일에서 텍스트를 읽기 위해 사용됩니다.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 파일을 읽기 위한 StreamReader 생성
        using (StreamReader reader = new StreamReader(@"d:\example.txt"))
        {
            // 파일에서 한 줄씩 읽어와 출력
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
        }
    }
}

* StreamReader 클래스를 사용하여 파일을 열고 읽기 위한 'reader' 변수를 선언합니다.

* example.txt 파일을 읽기 모드로 엽니다.

* using 문을 사용하여 파일을 사용한 후 자동으로 리소스를 해제하도록 합니다.

 

* ReadLine 메서드를 사용하여 파일에서 한 줄씩 읽어옵니다.

* 파일의 끝에 도달할 때까지 반복하면서 각 줄을 출력합니다.

* ReadLine 메서드는 읽은 한 줄의 문자열을 반환하며, 파일의 끝에 도달하면 null을 변환합니다.

 

 

c. 'StreamWriter' 클래스 : 파일에 텍스트를 쓰기 위해 사용됩니다.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 파일에 쓰기 위한 StreamWriter 생성
        using (StreamWriter writer = new StreamWriter(@"d:\example.txt"))
        {
            // 파일에 문자열 쓰기
            writer.WriteLine("Hello, World!");
            writer.WriteLine("This is a test.");
        }
    }
}

* StreamWriter 클래스를 사용하여 파일을 열고 쓰기 위한 writer 변수를 선언합니다.

* example.txt 파일을 쓰기 모드로 엽니다.

* using 문을 사용하여 파일을 사용한 후 자동으로 리소스를 해제하도록 합니다.

 

 

3. StreamReader와 StreamWriter VS FileStream

 

파일을 다루는 데 있어서 어떤 클래스를 사용해야 하는지에 대해 헷갈리는 경우가 있습니다.

C#에서 주로 사용되는 StreamReader 와 StreamWriter, 그리고 FileStream에 대해 쉽게 구분해복

 

a. StreamReader와 StreamWriter

 

주로 텍스트 파일을 다를 때 사용됩니다. 이들은 텍스트 파일을 읽고 쓰는데 최적화되어 있으며, 문자열을 편리하게 다루고 가공할 수 있습니다.

 

  • 텍스트 파일 처리 : 주로 텍스트 파일을 읽고 쓸 때 사용됩니다.
  • 편리한 문자열 다루기 : 문자열을 읽고 쓸 때 편리하며, 문자 인코딩과 버퍼링 등의 작업을 자동으로 처리합니다.
  • 텍스트 데이터 가공 : 텍스트 데이터를 행 단위로 가공할 때 유용합니다.
  • CSV 나 JSON과 같은 형식의 텍스트 파일 처리
  • 텍스트 파일에서 특정 문자열을 찾거나 치환하는 작업

 

b. FileStream

 

파일 입출력을 저수준에서 다룰 때 사용됩니다. 주로 바이너리 데이터를 다루거나 파일을 직접 조작해야 할 때 사용됩니다.

 

  • 바이너리 데이터 처리 : 주로 바이너리 파일(이미지, 오디오 등)을 읽고 쓸 때 사용됩니다.
  • 저수준 파일 입출력 : 파일의 바이트 단위 처리가 필요할 때 사용됩니다.
  • 성능 및 특정 조작 : 특정한 파일 조작이나 저수준 작업을 수행할 때 사용됩니다.
  • 이미지나 음악 파일과 같은 바이너리 데이터를 읽고 쓸 때 사용합니다.
  • 파일 시스템에 직접 접근하여 특정한 파일 작업을 수행할 때 사용합니다.

 

텍스트 파일을 다루거나 문자열을 읽고 쓸 때는 StreamReaer와 StreamWriter를 사용하고, 이미지, 오디오, 비디오, 압축파일 등의 바이너리 데이터를 다루거나 데이터베이스, 로그, 시스템 파일을 저수준에서 직접 조작해야 할 때는 FileStream을 사용하는 것이 좋습니다.