본문 바로가기

.NET

[C#] 파일 이동 및 복사, 삭제

C#에서 파일을 읽고 쓰는 것 뿐만 아니라 이동하거나 복사하고 삭제하는 작업도 할 수 있다.

파일을 읽고 쓰는 것보다도 간단하며 경험상 속도도 굉장히 빠르다.

 

string file_name = "test.txt";
string source_path = @"C:\Users\user\Desktop\old";
string target_path = @"C:\Users\user\Desktop\new";

string source_file = System.Io.Path.Combine(source_path, file_name);
string dest_file = System.Io.Path.Combine(target_path, file_name);

일단 파일과 경로를 지정하는 코드이다.

Path클래스를 사용해서 파일의 원래 위치와 이동시키고 싶은 위치를 지정해준다.

 

파일 복사

System.IO.File.Copy(source_file, dest_file, true);

Copy() 함수로 파일을 복사한다. 앞서 지정한 경로에 따라 작업이 수행되며 이미 해당경로에 파일이 존재한다면 덮어쓴다.

 

파일 이동

파일 이동은 하나만 이동시키는 것과 디렉토리 통째로 이동시키는 방법 2가지가 있다.

 

- 파일 하나만 이동

System.IO.File.Move(source_file, dest_file);

Move() 함수를 사용하여 원래 경로에서 원하는 경로로 파일을 이동시킨다.

 

- 디렉토리를 통째로 이동

string old_path = @"C:\Users\user\old_dir"
string new_path = @"C:\Users\user\new_dir"

System.IO.Directory.Move(old_path + "\\", new_path);

한 디렉토리 안의 내용을 원하는 디렉토리로 모두 이동시킨다. 위의 예제로 예를 들자면 old_dir안의 모든 파일 및 디렉토리를 new_dir로 옮긴다. \가 윈도우에서는 디렉토리 '안' 이라는 의미가 있기 때문에 old_path에 \를 더해준다.

 

파일 및 디렉토리 삭제

파일과 디렉토리를 삭제하는 방법은 총 4가지 이다.

  • - File 클래스를 사용한 파일 삭제
  • - FileInfo 인스턴스를 사용한 파일 삭제
  • - 빈 디렉토리 삭제
  • - 디렉토리와 하위항목 모두 삭제

 

- 파일 하나 삭제 (File 클래스 사용)

if (System.IO.File.Exists(@"C:\Users\user\test\test.txt")) {
    try {
    	System.IO.File.Delete(@"C:\Users\user\test\test.txt");
    } catch (System.IO.IOException e) {
    	// handle exception
    }
}

파일을 삭제하려면 먼저 그 파일이 존재하는지 검사를 해야한다. 

만약 존재해서 삭제를 진행한다면 try-catch문을 사용한다. 해당 파일을 사용 중이라면 삭제를 진행하지 못하고 예외를 발생시키기 때문에 그런 경우를 위해 예외처리를 해준다.

 

- 파일 하나 삭제 (FileInfo 인스턴스 사용)

System.IO.FileInfo file_info = new System.IO.FileInfo(@"C:\Users\user\test\test.txt");

try {
	file_info.Delete();
} catch (System.IO.IOException e) {
	// handle exception
}

원하는 경로를 가지고 FileInfo 클래스의 인스턴스를 만든 뒤 삭제한다.

마찬가지로 해당 파일이 사용 중이라면 예외를 발생시킨다.

 

- 빈 디렉토리 삭제

try {
 	System.IO.Directory.Delete(@"C:\Users\user\test");
} catch (System.IO.IOException e) {
	// handle exception
}

이 방식으로 디렉토리를 삭제하려면 반드시 빈 디렉토리여야 하며 쓰기권한이 있어야 삭제 할 수 있다.

 

- 디렉토리와 하위항목 모두 삭제

if (System.IO.Directory.Exists(@"C:\Users\user\test")) {
    try {
    	System.IO.Directory.Delete(@"C:\Users\user\test", true);
    } catch (System.IO.IOException e) {
    	// handle exception
    }
}

삭제하기 전 디렉토리가 존재하는지 확인한다.

존재한다면 해당 디렉토리와 하위항목을 모두 삭제한다.