C#从OpenFileDialog

时间:2015-05-14 18:11:37

标签: c# openfiledialog

我有一个带有添加按钮的表单。单击时,用户从对话框中选择一个或多个文件。

我的目标:

检索用户选择的所有文件的名称(从他们的文件所在的目录中),将这些文件复制到用户不使用File.Copy选择的指定文件夹中(我很难 - 编码文件路径和文件名)。

我的问题:

如果用户只选择一个,这可以正常工作。例如:

string name = System.IO.Path.GetFileName(sfd.FileName);

这会抓取文件。然后:

            DialogResult dialogResult = MessageBox.Show("Is this published?", "", MessageBoxButtons.YesNo);
            if (dialogResult == DialogResult.Yes)
            {
                Directory.CreateDirectory("c:\\NewTest\\" + txtAcronym.Text + "\\" + txtMajor.Text + "." + txtMinor.Text + "\\Published");
                File.Copy(sfd.FileName, "c:\\NewTest\\" + txtAcronym.Text + "\\" + txtMajor.Text + "." + txtMinor.Text + "\\Published\\" + name);
            }
            else if (dialogResult == DialogResult.No)
            {
                Directory.CreateDirectory("c:\\NewTest\\" + txtAcronym.Text + "\\" + txtMajor.Text + "." + txtMinor.Text + "\\NonPublished");
                File.Copy(sfd.FileName, "c:\\NewTest\\" + txtAcronym.Text + "\\" + txtMajor.Text + "." + txtMinor.Text + "\\NonPublished\\" + name);
            }

我问用户文件是否已发布。根据答案,它将创建一个目录并将该文件放在该目录中。

是否可以在openFileDialog中循环遍历多个文件名并将它们全部放在一个文件夹中,而不仅仅是一个?

1 个答案:

答案 0 :(得分:2)

将Multiselect设置为true。

myFileDialog.Multiselect = true;

当用户接受选择时,您可以使用FileNames属性获取它们。它返回字符串[] 。请注意FileName字符串的区别。您可以使用for或foreach来获得所有结果。

foreach (string file in myFileDialog.FileNames)
{
    //do work
}