将目录中的所有文件移动到新目录

时间:2018-08-15 04:34:24

标签: c# winforms directory

我有一个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语句中显示一个随机消息框,它会很好显示。我不知道出了什么问题,我们将不胜感激。

2 个答案:

答案 0 :(得分:2)

可以使用Directory.Move(string, string)方法来代替逐文件移动。

语法

   Directory.Move(sourceDirPath, DestinationDirPath)

有关更多信息:Directory.Move Method (String, String)

答案 1 :(得分:2)

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

添加检查