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

C# 스트림(Stream) 완벽 정리: 파일 입출력의 기본 개념과 FileStream 활용법

스트림(Stream)은 통신 경로를 통해 전달되는 바이트(byte)의 연속적인 흐름을 의미합니다. C#에서 스트림은 크게 두 가지로 나뉩니다.

  • 입력 스트림(Input Stream): 파일에서 데이터를 읽어오는 읽기(Read) 작업에 사용됩니다.
  • 출력 스트림(Output Stream): 파일에 데이터를 기록하는 쓰기(Write) 작업에 사용됩니다.

FileStream 클래스란?

System.IO 네임스페이스에 포함된 FileStream 클래스는 파일을 읽고, 쓰고, 닫는 작업을 수행하는 데 사용됩니다. 이 클래스는 추상 클래스인 Stream을 상속받아 구현되며, 바이트 단위의 저수준(low-level) 파일 입출력 처리에 적합합니다.

FileStream 객체 생성 방법

새 파일을 생성하거나 기존 파일을 열려면 FileStream 객체를 생성해야 합니다. 기본 문법은 다음과 같습니다.

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

각 매개변수가 어떤 역할을 하는지 하나씩 살펴보겠습니다.

1. FileMode

FileMode 열거형은 파일을 여는 다양한 방식을 정의합니다. 주요 멤버는 다음과 같습니다.

  • Append: 파일 끝에 데이터를 추가하며, 파일이 없으면 새로 생성합니다.
  • Create: 새 파일을 생성하며, 이미 파일이 있으면 덮어씁니다.
  • CreateNew: 새 파일을 생성하고, 동일한 이름의 파일이 있으면 예외를 발생시킵니다.
  • Open: 기존 파일을 엽니다.
  • OpenOrCreate: 파일이 있으면 열고, 없으면 새로 생성합니다.
  • Truncate: 기존 파일을 열고 내용을 모두 삭제합니다.

2. FileAccess

FileAccess 열거형은 파일에 대한 접근 권한을 지정하며, 다음 세 가지 멤버를 가집니다.

  • Read: 파일 읽기만 허용합니다.
  • Write: 파일 쓰기만 허용합니다.
  • ReadWrite: 읽기와 쓰기를 모두 허용합니다.

3. FileShare

FileShare 열거형은 여러 프로세스가 동시에 같은 파일에 접근할 때 공유 수준을 결정합니다. 주요 멤버는 다음과 같습니다.

  • Inheritable: 자식 프로세스가 파일 핸들을 상속할 수 있도록 합니다.
  • None: 파일 공유를 허용하지 않습니다.
  • Read: 다른 프로세스의 읽기 접근을 허용합니다.
  • Write: 다른 프로세스의 쓰기 접근을 허용합니다.
  • ReadWrite: 다른 프로세스의 읽기와 쓰기를 모두 허용합니다.

정리

C#의 스트림은 파일 입출력의 핵심 개념이며, FileStream 클래스를 활용하면 파일을 효율적으로 제어할 수 있습니다. FileMode, FileAccess, FileShare 세 가지 열거형을 적절히 조합하면 파일을 여는 방식, 접근 권한, 공유 정책을 세밀하게 설정할 수 있습니다.