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
}
}
삭제하기 전 디렉토리가 존재하는지 확인한다.
존재한다면 해당 디렉토리와 하위항목을 모두 삭제한다.
'.NET' 카테고리의 다른 글
[C#] 소켓 프로그래밍의 기본 개념 (0) | 2020.01.21 |
---|---|
[C#] 문자열 자르기 - Substring, Split, IndexOf 의 사용 (0) | 2020.01.21 |
[C#] 기본적인 파일 쓰기 및 읽기 (0) | 2020.01.20 |
[C#] 디렉토리 존재 유무 확인 및 생성 (0) | 2020.01.20 |
[C#] 반복문 - for, foreach 사용법 (0) | 2020.01.20 |