c# - 将目录中的所有文件移动到新目录
问题描述
我有一个 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 语句中弹出一个随机消息框,它就会出现。我不知道出了什么问题,感谢任何帮助。
解决方案
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
推荐阅读
- c++ - 获取 cout 中的最后一个字符
- java - 在流式响应/api 调用中未接收到数据
- javascript - 如何使用 React 从 strava api 下载 gpx 文件
- python - 用 python 抓取 etoro
- flutter - 提供者中的 notifyListeners 不工作导致使用提供者内部的类?
- sas - 在 SAS 宏调用中传递特殊字符(和号、连字符)
- javascript - 无法在 EditableGeoJsonLayer.updateState 处读取未定义的属性“highlightedObjectIndex”
- excel - 根据计算的单元格值更新形状的颜色
- php - 需要 Wordpress 评论作者
- python - LinkedList 的错误实现