You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何将指定目录下的所有子文件夹移动到目标文件夹?

问题分析与解决方案

错误原因

  1. 误包含目标文件夹:Directory.GetDirectories(selectedDrive)会返回所选驱动器下的所有子目录,其中包含你刚创建的Encrypted文件夹。当循环到这个文件夹时,源目录和目标目录完全一致,触发System.IO.IOException: 无法完成操作,因为源目录和目标目录相同的错误。
  2. 路径拼接逻辑错误:moveTo + Folder会生成类似D:\EncryptedD:\TestFolder的无效路径,导致判断目录是否存在的逻辑完全失效。
  3. 操作类型不符:你需要的是移动文件夹,但代码中使用的CopyDirectory是复制操作,而非移动。

修正后的代码

string selectedDrive = comboBox1.SelectedItem.ToString();
// 用Path.Combine确保路径格式正确,避免手动拼接反斜杠出错
string encryptedFolderPath = Path.Combine(selectedDrive, "Encrypted");
Directory.CreateDirectory(encryptedFolderPath);

// 获取所选驱动器下的所有子目录,排除Encrypted文件夹本身
string[] allFolders = Directory.GetDirectories(selectedDrive)
    .Where(dir => !dir.Equals(encryptedFolderPath, StringComparison.OrdinalIgnoreCase))
    .ToArray();

foreach (string sourceFolder in allFolders)
{
    // 提取源文件夹的名称,拼接到Encrypted目录下作为目标路径
    string folderName = Path.GetFileName(sourceFolder);
    string targetFolderPath = Path.Combine(encryptedFolderPath, folderName);
    
    // 目标路径不存在时执行移动
    if (!Directory.Exists(targetFolderPath))
    {
        Directory.Move(sourceFolder, targetFolderPath);
    }
}

关键改进点

  • 使用Path.Combine拼接路径,彻底避免手动拼接反斜杠导致的格式错误。
  • 过滤掉Encrypted文件夹,从根源上解决源目标路径重复的问题。
  • 改用Directory.Move实现真正的文件夹移动(如果需要保留源文件夹备份,可先调用FileSystem.CopyDirectory,再用Directory.Delete(sourceFolder, true)删除源)。
  • 正确提取源文件夹名称,生成合法的目标路径。

内容的提问来源于stack exchange,提问作者HQ220

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:40:39