C#에서의 파일 처리 개요
파일(File)이란 특정 이름과 디렉터리 경로를 가진 채로 디스크에 저장된 데이터의 집합을 의미합니다. 파일을 읽기 또는 쓰기 용도로 열면 그 순간부터 파일은 스트림(Stream)이 됩니다. C#에서는 스트림을 통해 파일에 데이터를 읽고 쓰는 모든 작업을 수행할 수 있습니다.
FileStream 객체 생성하기
C#에서 새 파일을 생성하거나 기존 파일을 열려면 FileStream 객체를 만들어야 합니다. FileStream 객체를 생성하는 기본 문법은 다음과 같습니다.
FileStream <객체명> = new FileStream( <파일명>, <FileMode 열거형>, <FileAccess 열거형>, <FileShare 열거형>);
FileMode 열거형
FileMode 열거형은 파일을 여는 다양한 방식을 정의합니다. 각 멤버는 다음과 같습니다.
- Append – 기존 파일을 열어 커서를 파일 끝으로 이동시키며, 파일이 존재하지 않으면 새로 생성합니다.
- Create – 새 파일을 생성합니다.
- CreateNew – 운영체제에 새 파일 생성을 지시하며, 이미 같은 이름의 파일이 있으면 예외가 발생합니다.
- Open – 기존 파일을 엽니다.
- OpenOrCreate – 파일이 존재하면 열고, 존재하지 않으면 새 파일을 생성하도록 운영체제에 지시합니다.
- Truncate – 기존 파일을 열어 크기를 0바이트로 초기화합니다.
FileAccess 열거형
FileAccess 열거형은 파일에 대한 접근 권한을 정의하며, Read(읽기), ReadWrite(읽기/쓰기), Write(쓰기) 세 가지 멤버를 가집니다.
FileShare 열거형
FileShare 열거형은 여러 프로세스가 동시에 같은 파일에 접근할 수 있는지를 결정합니다. 주요 멤버는 다음과 같습니다.
- Inheritable – 자식 프로세스가 파일 핸들을 상속받을 수 있도록 허용합니다.
- None – 현재 파일의 공유를 거부합니다.
- Read – 파일을 읽기 목적으로 여는 것을 허용합니다.
- ReadWrite – 파일을 읽기와 쓰기 목적으로 여는 것을 허용합니다.
- Write – 파일을 쓰기 목적으로 여는 것을 허용합니다.
디렉터리 내 파일 목록 조회 예제
다음 예제는 DirectoryInfo 객체를 사용해 특정 디렉터리에 있는 파일들의 이름과 크기를 가져오는 방법을 보여줍니다.
// DirectoryInfo 객체 생성
DirectoryInfo mydir = new DirectoryInfo(@"d:\Demo");
// 디렉터리 내 파일들과 이름, 크기 가져오기
FileInfo [] f = mydir.GetFiles();
foreach (FileInfo file in f) {
Console.WriteLine("File Name: {0} Size: {1}", file.Name, file.Length);
}위 코드에서 DirectoryInfo 클래스는 지정한 경로의 디렉터리 정보를 나타내며, GetFiles() 메서드는 해당 디렉터리에 포함된 모든 파일을 FileInfo 배열 형태로 반환합니다. 이후 foreach 루프를 통해 각 파일의 이름(Name)과 크기(Length, 바이트 단위)를 콘솔에 출력합니다.