我有一个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语句中显示一个随机消息框,它会很好显示。我不知道出了什么问题,我们将不胜感激。
答案 0 :(得分:2)
可以使用Directory.Move(string, string)
方法来代替逐文件移动。
语法
Directory.Move(sourceDirPath, DestinationDirPath)
答案 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