개발자는 파일 시스템을 수정하고 정보를 수집하거나 파일의 내용을 수정하기 위해 디렉토리와 파일에 접근해야 한다. 우리는 이 글에서 파일과 디렉토리와 관련된 필수 클래스들이 있는 System.IO 네임스페이스에 대해 논의할 것이다. 우리는 System.IO 네임스페이스를 필요로 하는 간단한 C# 애플리케이션을 예로 사용할 것이다.

System.IO 네임스페이스는 디렉토리와 파일관련 작업에 필요한 클래스, 메소드, 프로퍼티를 제공한다. 주요 클래스들은 다음에 나열했고, 네임스페이스와 클래스의 완전한 정보는 MS의 웹사이트에서 확인하라(주: C#에서 프로퍼티는 get, set 메소드를 구현한 변수를 말한다).

* BinaryReader, BinaryWriter: 바이너리 데이터를 읽고 쓰는 기능을 제공한다.
* Directory, DirectoryInfo: 디렉토리를 만들고, 옮기고, 읽는 기능을 제공한다.
* File, FileInfo: 파일을 만들고, 복사하고, 삭제하고, 옮기고, 여는 기능을 제공한다.
* FileStream: 임의 접근을 허용한다(주: 파일에 처음부터 접근하지 않고 위치를 임의로 정할 수 있다).
* FileStreaminfo: FileInfo와 DirectoryInfo의 상위 클래스다.
* FileStreamWatcher: 특정 디렉토리에서 하위 디렉토리나 파일의 이벤트를 감시하는 기능을 제공한다.
* StreamReader, StreamWriter, StringReader, StringWriter: 텍스트 데이터를 읽고 쓰는 기능을 제공한다.
* TextReader, TextWriter: 문자열을 순차적으로 읽고 쓰는 기능을 제공한다.

이 클래스들 중 5가지를 좀 더 자세히 설명한다.

FileSystemInfo 클래스
FileSystemInfo는 추상 클래스이기 때문에 직접 객체를 생성할 수 없다. 이 클래스는 DirectoryInfo와 FileInfo의 상위 클래스이고 다음은 이 클래스의 프로퍼티와 메소드들이다.

* Attributes: 파일의 속성을 가져온다
* CreationTime: 파일의 생성 시간을 가져온다
* Exists: 파일이 존재하는지 검사한다.
* Extension: 파일의 확장자를 가져온다
* LastAccessTime: 파일에 마지막으로 접근한 시간을 가져온다
* FullName: 경로를 포함한 파일이름을 가져온다
* LastWriteTime: 파일에 마지막으로 쓴 시간을 가져온다
* Name: 파일의 이름을 가져온다

DirectoryInfo 클래스
이 클래스는 디렉토리와 특정 디렉토리의 하위 디렉토리와 파일을 만들고, 복사하고, 옮기고, 삭제하고, 이름을 변경하고, 나열하는 기능을 제공한다. 다음 예는 DirectoryInfo 클래스를 사용하는 것인데 예 A는 디렉토리의 FullNameproperty를 얻어오는 코드이고 예 B는 하위 디렉토리를 만드는 코드이다.

--예 A
DirectoryInfo dr1 = new DirectoryInfo (@"C:\code_examples1\");
MessageBox.Show(dr1.FullName);

--예 B
DirectoryInfo dr2 = new DirectoryInfo(@"C:\code_examples2\");
dr1.CreateSubdirectory("subdir1");

FileInfo 클래스
이 클래스는 파일을 만들고, 복사하고, 옮기고, 삭제하고, 여는 기능을 제공한다. 다음은 FileInfo 클래스를 사용하는 예인데 예 C는 파일의 생성 시간을 얻어오는 필수 코드이다. 그리고 예 D는 파일의 크기를 얻어오는 코드이고 예 D는 파일을 삭제하는 예이다.

-- 예 C
FileInfo f1 = new FileInfo (@"C:\code_examples1\file1.txt");
MessageBox.Show(f1.CreationTime.ToString());

-- 예 D
FileInfo f2 = new FileInfo (@"C:\code_examples1\file2.txt");
MessageBox.Show(f2.Length.ToString());

-- 예 E
FileInfo f3 = new FileInfo (@"C:\code_examples1\file3.txt");

f3.Delete(); //delete the file
MessageBox.Show(f1.Exists.ToString()); //the file has been deleted so will display false

StreamWriter와 StreamReader 클래스
예 F는 파일에 텍스트를 쓰는 코드이고 예 G는 파일의 내용을 라인 단위로 읽는 것이다. 그리고 예 H는 파일의 전체내용을 한 번에 읽는 코드이다.

-- 예 F
FileInfo f1 = new FileInfo (@"C:\code_examples1\file1.txt");
StreamWriter w1 = f1.CreateText();

w1.WriteLine("Line 1");

w1.WriteLine("Line 2");

w1.Close();
-- 예 G
string str1="";
StreamReader s1 = File.OpenText(@"C:\code_examples1\file1.txt");
while ((str1 = s1.ReadLine()) != null)

{
MessageBox.Show(str1);

}

s1.Close();
-- 예 H
string str1="";
StreamReader s1 = File.OpenText(@"C:\code_examples1\file1.txt");

str1 = s1.ReadToEnd();
MessageBox.Show(str1);

s1.Close();

Open() 메소드 사용하기
예 I는 Open() 메소드로 파일을 읽고 쓰는 것이다. 여기서 파일모드 옵션(FileMode Enumeration)을 열거, 설명한다.

* Append: 파일을 열고 데이터를 추가하는데 사용한다. 반드시 FileAccess.Write 값과 함께 사용해야 한다.
* Create: 새 파일을 만드는데 사용한다. 만약 같은 이름의 파일이 존재하면 덮어쓴다.
* CreateNew: 새 파일을 만드는데 사용하지만 같은 이름의 파일이 존재하면 IOException을 발생시킨다.
* Open: 파일을 여는데 사용한다.
* OpenOrCreate: 같은 이름의 파일이 존재하면 열고 없으면 새로 생성한다.
* Truncate: 존재하는 파일의 내용을 무시하고 빈 파일로 연다.

다음은 파일 접근 옵션(FileAcess Enumeration)이다.
* Read: 파일의 데이터를 읽을 때 사용한다.
* ReadWrite: 파일의 데이터를 읽기도 하고 쓰기도 할 때 사용한다.
* Write: 파일에 데이터를 쓸 때 사용한다.

C#에서 System.IO 네임스페이스를 사용해 디렉토리와 파일에 접근하는 방법을 살펴보았다. @

** 저자 소개 **
아이리나 메드빈스카야는 1996년부터 IT 업계에 일했다. 그는 페이스 대학에서 MBA 학위를 받았고 시티그룹에서 프로젝트 관리자로 일한다.

'.net' 카테고리의 다른 글

ASP.NET 2.0에서 달라진 기능  (0) 2007.07.21
개발자가 알아두면 좋은 ASP.NET 지식 (세션편  (0) 2007.07.21
DataReader  (1) 2007.07.17
DB _ command  (0) 2007.07.17
DB를 연결  (0) 2007.07.17

+ Recent posts