【问题标题】:How to know which file is selected in open dialog in c#如何知道在c#的打开对话框中选择了哪个文件
【发布时间】:2012-05-18 10:05:11
【问题描述】:

我必须打开一个文件对话框。我必须选择一个文件,XML 或 MAP 文件。如果选择的文件是 MAP 文件,那么我必须执行步骤 A,或者如果选择的文件是 XML,那么我必须执行步骤 B。我的问题是如何知道从对话框应用程序中选择了哪个文件?

OpenFileDialog fileDialog1 = new OpenFileDialog();
fileDialog1.Filter = "XML Files|*.xml|MAP Files|*.map";
fileDialog1.ShowDialog();

如何知道从上面的过滤器中选择了哪个文件?

【问题讨论】:

  • 此对话框是模态的,您的代码如何捕捉该组合上选定的索引更改?您应该等待确定单击,然后处理请求的文件名。还是我误解了你的意图?
  • @Steve:您可以挂钩对话框并接收这些事件的通知。基本上,您附加一个事件处理程序方法,并且每次用户在对话框中执行特定操作时都会调用该方法。但在我看来,这并不是 Amarnath 想要的。
  • @CodyGray 谢谢,你当然是对的,但是......我怎么说呢?用枪打苍蝇?

标签: c# wpf


【解决方案1】:

你可以使用:

   string fileName = OpenFileDialog.Filename;

    if(fileName.EndsWith(".xml"))
    {
    //
    }
    else if(fileName.EndsWith(".map"))
    {
     //
    }

【讨论】:

  • 当您可以使用FileDialog.FilterIndex property 来确定当用户在对话框中单击“确定”时选择了哪个过滤器,您为什么要这样做?
  • 我不熟悉该属性,如果我提前知道它,我会建议它而不是我的答案。不过感谢您的链接,每天在这里学习新东西:)
  • 我已经使用了 Dialog.FileName.Endswith("")。感谢您推荐 Endswith() 函数。
【解决方案2】:

我认为你不能在它打开时这样做。

当用户按下 OK 时,然后在 Path.GetExtension 方法或 OpenFileDialog.Filename.Endswith(".xml") 中传递 OpenFileDialog.Filename

检查扩展名是否为 XML,然后执行 x 步骤,否则执行 y 步骤。

编辑

查看您需要的功能,打开文件对话框中必须有一个事件。

有2个OpenFileDialog

  1. System.Windows.Forms
  2. Microsoft.Win32

两者都只有一个事件OpenFileDialog.FileOK 可供您查找。

【讨论】:

  • 是的,我已经完成了它的工作正常。但只是想知道“有什么方法可以让我知道从过滤器中选择了哪个文件,而不是获取文件并获取扩展名?”
  • 您的用户甚至可以选择不以 xml 或 map 结尾的文件。只需在文件名文本框中输入*.*(按 Enter),然后选择一个不同的。过滤器可以帮助您的用户选择有效类型,但不会强制执行。这意味着无论如何您都必须检查返回值。
  • @Davio 感谢您的建议。你让我重新思考了我的设计。
【解决方案3】:
        openFileDialog1.FileName = "";
        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string filename = openFileDialog1.FileName;

            if (File.Exists(filename))
            {
                //do something here
            }
        }

OpenFileDialogFileName属性是选择的文件名。

【讨论】:

    【解决方案4】:

    您甚至可以在带有堆叠标签的开关中使用类似的扩展名,并对不受支持的文件类型使用默认大小写:

    switch (extension)
    {
        case "xml":
        case "xaml":
            Debug.WriteLine("It's an XML!");
            break;
        case "map":
            Debug.WriteLine("It's a map!");
            break;
        default:
            MessageBox.Show("Please select an XML or MAP file");
            // Show the dialog again
            break;
    }
    

    【讨论】:

      【解决方案5】:

      好吧,如果幸运的是所有过滤器都有不同的扩展名,上述答案将起作用。但是如果我们谈论的是具有相同扩展名的不同文件版本,那么我们可以通过以下代码获取选定的过滤器:

      SaveFileDialog dlg = new SaveFileDialog();
              dlg.Filter = "Excel 97|*.xls|Excel 95|*.xls";
              if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
              {
                  //Filer index is 1 based.
                  switch (dlg.FilterIndex)
                  {
                      case 1:
                          //Filter name: Excel 97
                          break;
                      case 2:
                          //Filter name: Excel 95
                          break;
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2011-10-15
        • 1970-01-01
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        • 2018-01-12
        • 1970-01-01
        • 2011-10-27
        • 2013-04-19
        相关资源
        最近更新 更多