본문 바로가기

C#/파일 처리

C#에서 파일 처리 (파일 존재 확인, 삭제, 복사, 이동, 이름 수정, 크기)

파일의 존재를 확인하고 파일을 삭제하고 파일을 이동하고 파일의 크기를 구하는 등의 처리를 수행하려면 System.IO 네임스페이스에 있는 File 클래스FileInfo 클래스를 사용한다.

이 두 개의 클래스에 포함된 메서드는 모두 비슷하다.

 

File과 FileInfo 중 어느 쪽을 사용해야 할까?

 

일반적으로는 인스턴스를 생성할 필요가 없는 File 클래스를 사용하는 것이 좋다.

 

그러나 언제나 File 클래스를 사용하는 것이 좋은 것만은 아니다.

만약 FileInfo 생성자에서 파일이름을 지정해서 FileInfo 객체를 이미 생성한 상태라면

이 상태에서 File.Delete를 사용할 경우에는 FileInfo 생성자와 File.Delete 메서드의 두 곳에서 파일 이름을 지정해야 하므로 코드가 장황해진다.

var fi = new FileInfo(@”C:\Example.txt”);
//File.Delete(@”C:\Example.txt”);    //두 곳에서 필요없이 파일 이름을 지정하는 것은 낭비
if (fi.Length == 0)
    fi.Delete();    //이미 FileInfo 객체가 생성되어있으면 그걸 사용한다.

 

파일에 어떤 처리를 수행하기 전에 이미 FileInfo 객체가 구해진 상태라면 FileInfo클래스에 있는 메서드를 이용하는 것이 좋다.

 

1. 파일이 존재하는지 여부를 조사

 

File.Exists라는 정적 메서드를 사용하면 지정한 파일이 존재하는지 여부를 조사할 수 있다.

파일이 존재한다면 true가 반환

존재하지 않는다면 false가 반환

File.Exists(@”C:\Example.txt”);

 

2. 파일 삭제

 

지정한 파일을 삭제하려면 File.Delete라는 정적 메서드를 사용

지정한 파일이 존재하지 않을 경우에도 예외가 발생하지 않는다.

File.Delete(@”C:\Example.txt”);

 

3. 파일 복사

 

File.Copy라는 정적 메서드를 사용하면 파일을 복사할 수 있다.

첫 번째 인수에 지정한 파일을 두 번째 인수에 지정한 파일로 복사한다.

복사할 곳에 이미 파일이 존재한다면 IOException 예외가 발생한다.

기존 파일을 덮어써도 좋다면 세 번째 인수인 overwrite에 true를 지정한다.

File.Copy(@”C:\source.txt”, @”C:\target.txt”);
File.Copy(@”C:\source.txt”, @”C:\target.txt”, overwrite:true);

 

4. 파일 이동

 

파일을 이동시키려면 File.Move라는 정적 메서드를 사용한다.

첫번째 인수에 지정한 파일을 두 번째 인수에 지정한 경로로 이동시킨다.

 

이동할 곳에 동일 이름의 파일이 이미 존재할 경우 : IOException 예외발생

복사할 곳의 디렉터리가 존재하지 않을 경우 : DirectoryNotFoundException 예외발생

File.Move(@”C:\src\Example.txt”, @”C:\dest\Example.txt”);

 

File.Move 메서드다른 드라이브 사이의 이동은 지원하지 않는다.

다른 드라이브를 지정한 경우에는 복사처리된다. (이동 처리가 아니므로 주의하자!)

 

5. 파일 이름 수정

 

파일의 이름을 수정하려면 이동할 때와 동일하게 File.Move라는 정적 메서드를 사용한다.

이동할 곳의 경로를 이동하는 쪽과 같은 디렉터리로 지정하면 파일 이름을 수정할 수 있다.

File.Move(@”C:\src\oldName.txt”, @”C:\src\newName.txt”);

 

6. 파일을 수정한 시간과 만든 시간을 구하고 설정

 

파일을 수정한 시간을 구하려면 File.GetLastWriteTime이라는 정적 메서드를 사용한다.

var lastWriteTime = File.GetLastWriteTime(@”C:\Example.txt”);

 

파일을 수정한 시간을 설정하려면 File.SetLastWriteTime이라는 정적 메서드를 사용한다.

File.SetLastWriteTime(@”C:\Example.txt”, DateTime.Now);

 

7. 파일의 크기 구하기

 

파일의 크기를 수하려면 FileInfo.Length 속성을 사용한다.

반환값의 형은 long 형이다.

 

File 클래스를 사용해 파일의 크기를 구할 수는 없다.

var fi = new FileInfo(@”C:\Example.txt”);
long size = fi.Length;