본문 바로가기
Utils

C#, 폴더 및 파일 전체 복사

by Client. DJ 2023. 7. 4.
반응형

완전 복제

스크립트로 파일 또는 폴더 자체를 복제가 필요한 상황이 생겨 작성하게 되었습니다.

스크립트

public static class Utils
{
    /// <summary>
    /// 폴더 복제 (하위 폴더 및 파일 모두)
    /// </summary>
    /// <param name="sourceFolderPath"></param>
    /// <param name="destinationFolderPath"></param>
    public static void CloneFolder(string sourceFolderPath, string destinationFolderPath)
    {
        if (Directory.Exists(sourceFolderPath))
        {
            // 폴더 생성
            Directory.CreateDirectory(destinationFolderPath);
            var files = Directory.GetFiles(sourceFolderPath);

            // 파일 복사
            foreach (var file in files)
            {
                string fileName = Path.GetFileName(file);
                string destinationFilePath = Path.Combine(destinationFolderPath, fileName);
                CloneFile(file, destinationFilePath);
            }

            // 폴더 복사 (재귀)
            var directories = Directory.GetDirectories(sourceFolderPath);
            foreach (var directory in directories)
            {
                string folderName = Path.GetFileName(directory);
                string destinationSubFolderPath = Path.Combine(destinationFolderPath, folderName);
                CloneFolder(directory, destinationSubFolderPath);
            }

            AssetDatabase.Refresh();
            Debug.Log("Folder copied successfully!");
        }
        else
        {
            Debug.LogError("Folder not found at path: " + sourceFolderPath);
        }
    }

    /// <summary>
    /// 파일 복제
    /// </summary>
    /// <param name="sourceFilePath"></param>
    /// <param name="destinationFilePath"></param>
    public static void CloneFile(string sourceFilePath, string destinationFilePath)
    {
        if (File.Exists(sourceFilePath))
        {
            // 파일 생성
            File.Copy(sourceFilePath, destinationFilePath, true);
            AssetDatabase.Refresh();
            Debug.Log("File copied successfully!");
        }
        else
        {
            Debug.LogError("File not found at path: " + sourceFilePath);
        }
    }
}

예제

private static void Main(params string[] args)
{
    // 단일 파일 복사
    CloneFile(sourceFilePath: $"D:/Folder/Text.txt",
                destinationFilePath: $"D:/Folder/Text2.txt");


    // 폴더 자체 복사
    CloneFolder(sourceFolderPath: $"D:/Folder",
                destinationFolderPath: $"D:/Folder2");
}

마무리

유니티 스크립트가 사용되었지만, 불필요하면 해당 부분만 제거하시면 됩니다. .NET Document에서 제시하는 방법도 있으니 참고하시면 좋을 것 같습니다.


참고 : https://learn.microsoft.com/ko-kr/dotnet/standard/io/how-to-copy-directories

 

반응형

댓글