首页 > 解决方案 > 将目录中的所有文件移动到新目录

问题描述

我有一个 C# Windows 窗体应用程序,我想将桌面上的所有文件移动到另一个目录。出于测试目的,我刚刚在桌面上创建了一个名为“Test”的文件夹,我希望将文件移动到该文件夹​​中。当第一个表单打开时,我让这段代码正确运行:

try
        {
            string dest = @"C:\Users\Billeh\Desktop\Test\";
            string[] files = Directory.GetFiles(@"C:\Users\Billeh\Desktop\");
            foreach (var file in files)
            {
                File.Move(file, dest);
            }
        } catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }

但是,这似乎没有任何作用。它只是继续并打开表单,就像它被跳过一样。没有消息框弹出,我知道它没有被跳过,因为如果我让它在 try 语句中弹出一个随机消息框,它就会出现。我不知道出了什么问题,感谢任何帮助。

标签: c#winformsdirectory

解决方案


File.Move需要一个目标文件,而不仅仅是一个目标文件夹。您需要决定如何命名目标文件夹中移动的文件。它可以是源文件的相同名称或您选择的其他名称。如果您想保留旧名称,Path.GetFilename 可能会有所帮助。

另请注意,EnumerateFiles比 GetFiles 更好,因为它允许您开始移动操作而无需先将所有文件名加载到内存中。

try
{
    string dest = @"C:\Users\Billeh\Desktop\Test";
    foreach (var file in Directory.EnumerateFiles(@"C:\Users\Billeh\Desktop\")
    {
        string destFile = Path.Combine(dest, Path.GetFileName(file))
        if(!File.Exists(destFile))
            File.Move(file, destFile);

    }
} 
catch (Exception e)
{
    MessageBox.Show(e.ToString());
}

还要考虑 File.Move 不能覆盖目标文件夹中的现有文件。如果文件存在,则会引发 IOException。所以,如果你想覆盖,你需要先删除目标文件,但无论如何,你需要添加一个检查File.Exists


推荐阅读