使用 openfiledialog 移动多个文件

Moving multiple files with openfiledialog

我正在尝试将多个文件移动到打开文件对话框中的另一个目录,同时保留文件名。我在处理多个文件时遇到了麻烦,并创建了一个字符串数组和一个 foreach 循环。下面是代码。我试图循环数组(i++ 等),但一直收到 'cannot find string[]' 错误。基本上它对第一个文件没有问题,但它想继续将同一个文件移动到另一个目录。它不会向下移动所选文件的列表来移动它们。我尝试了 'System.IO.File.Move',结果相同。我意识到下面这段代码是伪劣的。

string [] MoveFrom = openFileDialog1.FileNames;

string [] FileName = openFileDialog1.SafeFileNames;

string MoveTo = "C://Users//Kevin//Desktop//Archive";

        foreach (string files in MoveFrom)
                {
                  foreach (string files2 in FileName)
                    {
                      Directory.Move(MoveFrom, MoveTo + "//" + FileName)                                       
                     }
                 }

首先,您必须将 openFileDialog 的 属性 Multiselect 设置为 true。然后您将访问 FileNames 属性。之后你只能使用 on foreach 循环来移动文件。

关于异常:您尝试将数组 MoveFrom 传递给方法 Move() :

Directory.Move(MoveFrom, MoveTo + "//" + FileName)

但根据此方法的 syntax 必须有 string 变量:

public static void Move(string sourceDirName, string destDirName)

在foreach中你应该使用循环变量。此外,我更喜欢使用 Path.Combine() 来防止使用 '\' 和 Path.GetFileName() 来获取扩展名为

的文件名

请尝试这样的操作:

 openFileDialog1.Multiselect = true;
 if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
 {
   string[] MoveFrom = openFileDialog1.FileNames;
   string MoveTo = "C://Users//Kevin//Desktop//Archive";

   foreach (string files in MoveFrom)
   {
        Directory.Move(files, Path.Combine(MoveTo, Path.GetFileName(files)));                                                     
   }
 }

这应该有效:

string MoveTo = "D:\"; //Change to your path
openFileDialog1.Multiselect = true;
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        foreach (string _file in openFileDialog1.FileNames)
        {
            FileInfo fi = new FileInfo(_file);
            File.Move(_file, Path.Combine(MoveTo, fi.Name));
        }
    }