Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 디렉터리로 파일을 복사하는 방법 (File.Copy 활용 가이드)

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) 형태로 호출하는 것이 좋습니다.