猿问

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

我有一个 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 语句中弹出一个随机消息框,它会很好地出现。我不知道出了什么问题,任何帮助表示赞赏。


慕哥9229398
浏览 291回答 2
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

拉莫斯之舞

您可以使用Directory.Move(string, string)方法,而不是逐个文件移动文件。句法   Directory.Move(sourceDirPath, DestinationDirPath)
随时随地看视频慕课网APP
我要回答