파일 입출력은 프로그래밍에서 중요한 개념 중 하나입니다.
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을 사용하는 것이 좋습니다.
'Programming' 카테고리의 다른 글
파이썬(Python) 기초 : 아나콘다, 주피터랩으로 파이썬 시작하기 (0) | 2024.04.05 |
---|---|
간단한 데이터 입력 및 텍스트 파일에 저장하기 : 쉽고 재미있는 C# Programming 의 기본 (0) | 2024.03.08 |
예외처리 및 프로그램 디버깅 : 쉽고 재미있는 C# Programming 의 기본 (0) | 2024.01.30 |
자료구조 : 쉽고 재미있는 C# Programming 의 기본 (0) | 2024.01.24 |
배열 : 쉽고 재미있는 C# Programming 의 기본 (2) | 2024.01.23 |