首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 批量複製文件夾圖片至目標目錄完整實現

     編輯:程式設計綜合問答

核心需求

遍歷源文件夾所有圖片文件,複製到目標文件夾,保持文件名不變,支持子目錄遞歸。

完整實現代碼

using System;
using System.IO;

public class ImageCopier {
    public void CopyImages(string sourceDir, string destDir, bool overwrite = true) {
        // 1. 參數驗證
        if (!Directory.Exists(sourceDir))
            throw new DirectoryNotFoundException($"源目錄不存在: {sourceDir}");

        // 2. 確保目標目錄存在
        Directory.CreateDirectory(destDir);

        // 3. 定義圖片擴展名過濾
        string[] imageExtensions = { ".jpg", ".jpeg", ".png", ".bmp", ".gif", ".tiff", ".webp" };

        // 4. 遞歸複製
        CopyDirectoryRecursive(sourceDir, destDir, imageExtensions, overwrite);
    }

    private void CopyDirectoryRecursive(string src, string dest, string[] extensions, bool overwrite) {
        try {
            // 複製當前目錄文件
            foreach (string file in Directory.GetFiles(src)) {
                string ext = Path.GetExtension(file).ToLower();
                if (Array.Exists(extensions, e => e == ext)) {
                    string destFile = Path.Combine(dest, Path.GetFileName(file));
                    if (overwrite || !File.Exists(destFile)) {
                        File.Copy(file, destFile, overwrite);
                        Console.WriteLine($"已複製: {file} → {destFile}");
                    }
                }
            }

            // 遞歸處理子目錄
            foreach (string dir in Directory.GetDirectories(src)) {
                string subDest = Path.Combine(dest, Path.GetFileName(dir));
                CopyDirectoryRecursive(dir, subDest, extensions, overwrite);
            }
        } catch (Exception ex) {
            LogError(ex.Message);
        }
    }

    private void LogError(string msg) {
        File.AppendAllText("copy_log.txt", $"{DateTime.Now}: {msg}\n");
    }
}

// 使用示例
var copier = new ImageCopier();
copier.CopyImages(@"D:\Photos", @"E:\Backup\Photos");

關鍵技術點

  • Directory.GetFiles() 獲取文件列表,配合擴展名過濾
  • Path.Combine() 安全拼接路徑,跨平台兼容
  • File.Copy(..., true) 覆蓋模式參數
  • 遞歸處理子目錄,保持目錄結構
  • 異常捕獲與日誌記錄,保證健壯性

進階優化

  • 大文件使用 FileStream 分塊複製,顯示進度
  • Parallel.ForEach 並行複製提升性能
  • FileSystemWatcher 實時監控增量同步
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved