为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕哥9229398 2021-11-28 18:49:13
我有一个 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 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-11-28
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您可以使用Directory.Move(string, string)方法,而不是逐个文件移动文件。

句法

   Directory.Move(sourceDirPath, DestinationDirPath)


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 290 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信