C#에서 파일을 복사하려면 File.Copy 메서드를 사용합니다. 이 메서드는 System.IO 네임스페이스에 포함되어 있으며, 두 가지 오버로드가 제공됩니다.
File.Copy의 두 가지 오버로드
Copy(String, String) — 기존 파일을 새 파일로 복사합니다. 같은 이름의 파일이 이미 존재할 경우 덮어쓰기가 허용되지 않으며, 예외가 발생합니다.
Copy(String, String, Boolean) — 기존 파일을 새 파일로 복사합니다. 세 번째 매개변수(Boolean)에 true를 전달하면 같은 이름의 파일을 덮어쓸 수 있습니다.
Directory.GetFiles 메서드
Directory.GetFiles는 지정된 검색 패턴과 일치하는 모든 파일의 이름(전체 경로 포함)을 반환하며, 선택적으로 하위 디렉터리까지 검색할 수 있습니다.
예제 코드
아래 예제는 소스 폴더의 모든 파일을 대상 폴더로 복사하는 전체 과정을 보여줍니다. 복사 전후의 폴더 상태를 콘솔에 출력하여 결과를 확인할 수 있습니다.
static void Main(string[] args) {
string rootPath = @"C:\Users\Koushik\Desktop\TestFolder\TestFolderMain1";
var searchSourceFolder = Directory.GetFiles(rootPath, "*.*", SearchOption.TopDirectoryOnly);
Console.WriteLine("-------------소스 폴더-------------");
foreach (string file in searchSourceFolder) {
Console.WriteLine(file);
}
string destinationFolder = @"C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\\";
var destinationFolderFiles = Directory.GetFiles(destinationFolder, "*.*", SearchOption.TopDirectoryOnly);
Console.WriteLine("-------------복사 전 대상 폴더-------------");
foreach (string file in destinationFolderFiles) {
Console.WriteLine(file);
}
string[] files = Directory.GetFiles(rootPath);
foreach (string file in files) {
File.Copy(file, $"{destinationFolder}{Path.GetFileName(file)}");
}
Console.WriteLine("-------------복사 후-------------");
var destinationFolderAfterCopyingFiles = Directory.GetFiles(destinationFolder, "*.*", SearchOption.TopDirectoryOnly);
foreach (string file in destinationFolderAfterCopyingFiles) {
Console.WriteLine(file);
}
Console.ReadLine();
}실행 결과
-------------소스 폴더------------- C:\Users\Koushik\Desktop\TestFolder\TestFolderMain1\TestFolderMain1.txt -------------복사 전 대상 폴더------------- C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain2.txt -------------복사 후------------- C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain1.txt C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain2.txt
핵심 정리
위 코드의 동작 흐름은 다음과 같습니다.
1. Directory.GetFiles로 소스 폴더와 대상 폴더의 파일 목록을 조회합니다.
2. 각 파일에 대해 Path.GetFileName으로 파일명만 추출한 뒤, 대상 폴더 경로와 결합하여 새 경로를 만듭니다.
3. File.Copy를 호출해 파일을 복사합니다.
참고로 위 예제는 덮어쓰기를 허용하지 않는 오버로드를 사용했기 때문에, 대상 폴더에 같은 이름의 파일이 이미 존재하면 IOException이 발생합니다. 덮어쓰기를 원한다면 세 번째 인자에 true를 전달하는 File.Copy(file, destPath, true) 형태로 호출하는 것이 좋습니다.