Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# FileStream 객체 완벽 가이드: 파일 생성과 읽기·쓰기 방법

C#에서 파일을 다루는 FileStream 객체란?

C#에서 새로운 파일을 생성하거나 기존 파일을 열 때는 FileStream 객체를 사용합니다. FileStream은 System.IO 네임스페이스에 포함되어 있으며, 파일에 대해 바이트 단위의 읽기와 쓰기를 수행할 수 있는 강력한 클래스입니다.

FileStream 기본 문법

FileStream 객체를 생성하는 기본 문법은 다음과 같습니다.

FileStream <객체명> = new FileStream(<파일명>, <FileMode 열거형>,
<FileAccess 열거형>, <FileShare 열거형>);

주요 매개변수 살펴보기

  • FileMode: 파일을 여는 방식을 지정합니다. (OpenOrCreate, Append, Create, Open 등)
  • FileAccess: 파일 접근 권한을 결정합니다. (Read, Write, ReadWrite)
  • FileShare: 다른 프로세스와 파일을 어떻게 공유할지 지정합니다.

예를 들어 "test.dat"라는 파일을 생성하거나 이미 존재한다면 여는 코드는 다음과 같습니다.

FileStream F = new FileStream("test.dat", FileMode.OpenOrCreate,
FileAccess.ReadWrite);

전체 예제 코드

다음 예제는 test.dat 파일에 1부터 20까지의 값을 바이트 단위로 기록한 후, 파일 포인터를 처음으로 이동시켜 내용을 다시 읽어 콘솔에 출력하는 프로그램입니다.

using System;
using System.IO;

namespace FileIOApplication {
    class Program {
        static void Main(string[] args) {
            FileStream F = new FileStream("test.dat", FileMode.OpenOrCreate,
            FileAccess.ReadWrite);

            // 1부터 20까지의 값을 파일에 쓰기
            for (int i = 1; i <= 20; i++) {
                F.WriteByte((byte)i);
            }

            // 파일 위치를 스트림의 시작점으로 이동
            F.Position = 0;

            // 파일 내용을 한 바이트씩 읽어 출력
            for (int i = 0; i <= 20; i++) {
                Console.Write(F.ReadByte() + " ");
            }

            F.Close();
            Console.ReadKey();
        }
    }
}

코드 동작 원리

  • F.WriteByte((byte)i): 1부터 20까지의 정수를 바이트로 변환해 파일에 순차적으로 기록합니다.
  • F.Position = 0: 파일 포인터를 스트림의 시작 위치로 되돌립니다. 이 과정이 없으면 방금 쓴 데이터 뒤에서부터 읽게 됩니다.
  • F.ReadByte(): 파일에서 한 바이트씩 읽어 콘솔에 출력합니다.
  • F.Close(): 작업이 끝난 후 반드시 스트림을 닫아 시스템 리소스를 해제해야 합니다.

참고 사항

위 예제에서 두 번째 반복문은 21번 읽기를 시도하지만, 실제로 기록된 데이터는 20바이트뿐입니다. 따라서 마지막 읽기에서는 스트림의 끝에 도달했음을 의미하는 -1이 반환됩니다. 또한 실무에서는 using 문을 사용하면 스트림이 자동으로 닫히므로 리소스 누수를 방지하고 더 안전한 코드를 작성할 수 있습니다.