본문 바로가기
.NET

C# 폴더 내부 파일을 다른 폴더로 복사

by leo21c 2025. 5. 13.

C#에서 특정 폴더 내부의 파일을 다른 폴더로 복사하려면 System.IO 네임스페이스의 Directory 및 File 클래스를 사용할 수 있습니다. 다음은 폴더 내의 모든 파일을 복사하는 방법입니다.

1. 파일만 복사 (Directory.GetFiles 사용)

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string sourceFolder = @"C:\SourceFolder";
        string destinationFolder = @"C:\DestinationFolder";

        // 대상 폴더가 없으면 생성
        if (!Directory.Exists(destinationFolder))
        {
            Directory.CreateDirectory(destinationFolder);
        }

        // 폴더 내부 파일 복사
        foreach (string filePath in Directory.GetFiles(sourceFolder))
        {
            string fileName = Path.GetFileName(filePath); // 파일명 추출
            string destFilePath = Path.Combine(destinationFolder, fileName); // 새 경로 생성
            File.Copy(filePath, destFilePath, true); // 기존 파일 덮어쓰기 가능
            Console.WriteLine($"파일 복사됨: {fileName}");
        }
    }
}

 

📌 설명
- Directory.GetFiles(sourceFolder): 원본 폴더 내 모든 파일 목록 가져오기
- Path.GetFileName(filePath): 파일명만 추출
- Path.Combine(destinationFolder, fileName): 새 파일 경로 생성
- File.Copy(source, destination, true): 파일 복사 (true: 덮어쓰기 허용)

 

2. 파일 및 폴더까지 모두 복사 (Directory.GetFiles + Directory.GetDirectories)
만약 하위 폴더까지 포함하여 전체 복사하려면 Directory.GetDirectories를 활용하면 됩니다.

using System;
using System.IO;

class Program
{
    static void CopyDirectory(string sourceDir, string destinationDir)
    {
        // 대상 폴더가 없으면 생성
        if (!Directory.Exists(destinationDir))
        {
            Directory.CreateDirectory(destinationDir);
        }

        // 파일 복사
        foreach (string filePath in Directory.GetFiles(sourceDir))
        {
            string fileName = Path.GetFileName(filePath);
            string destFilePath = Path.Combine(destinationDir, fileName);
            File.Copy(filePath, destFilePath, true);
            Console.WriteLine($"파일 복사됨: {fileName}");
        }

        // 하위 폴더 복사 (재귀 호출)
        foreach (string subDir in Directory.GetDirectories(sourceDir))
        {
            string subDirName = Path.GetFileName(subDir);
            string destSubDir = Path.Combine(destinationDir, subDirName);
            CopyDirectory(subDir, destSubDir);
        }
    }

    static void Main()
    {
        string sourceFolder = @"C:\SourceFolder";
        string destinationFolder = @"C:\DestinationFolder";

        CopyDirectory(sourceFolder, destinationFolder);
        Console.WriteLine("폴더 복사 완료!");
    }
}

 

📌 설명
파일뿐만 아니라 하위 폴더까지 복사 가능
하위 폴더를 복사할 때 재귀 호출을 활용
Directory.GetDirectories(sourceDir): 폴더 목록 가져오기

🏆 결론
1️⃣ 파일만 복사하려면 Directory.GetFiles와 File.Copy를 사용. 2️⃣ 파일과 폴더 전체를 복사하려면 Directory.GetDirectories를 추가하여 재귀적으로 처리.

LIST