我正在尝试将多个文件移动到openfiledialog框中的另一个目录,同时保留文件名。我在使用多个文件时遇到了麻烦,并创建了一个字符串数组和一个foreach循环。下面是代码。我试图循环数组(i ++等),但不断收到'找不到字符串[]'错误。基本上它对第一个文件没问题但是它想继续将同一个文件移动到另一个目录。它不会向下移动所选文件列表以移动它们。我尝试了'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)
}
}
答案 0 :(得分:2)
首先,您必须将openFileDialog的属性Multiselect
设置为true
。然后,您将访问FileNames
属性。之后,您只能使用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)));
}
}
答案 1 :(得分:2)
这应该有效:
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));
}
}