2012-08-24 103 views
10

我得到了這個C#窗體表單應用程序,其中我爲一些任務操作加載了XML文件或CSV文件。我有一個瀏覽按鈕。當我點擊瀏覽按鈕時,出現打開文件對話框,我可以導航到我的驅動器上的一個位置並選擇文件,然後使用上傳按鈕上傳它。 如果我加載JPG或ZIP文件或其格式爲CSV或XML以外的任何文件,我的應用程序將崩潰。是否有任何限制打開文件對話框在C#中僅打開CSV或XMl文件的方法?使用「打開文件」對話框限制可以選擇的文件

+0

爲什麼你不驗證擴展名,然後再上傳? –

回答

23

使用

openFileDialog.Filter = "CSV files (*.csv)|*.csv|XML files (*.xml)|*.xml"; 

這樣,只有CSV文件或XML文件顯示。 但用戶也可以選擇其他文件類型,如果他們鍵入完整的名稱 - 所以檢查所選的文件名並相應地更正您的代碼。

+0

super one dude :)) – user1501034

+2

您也可以組合過濾器,以便用戶可以看到csv和xml文件,如下所示:openFileDialog.Filter =「Data files | * .csv; *。xml」; – sventevit

0

您可以使用Filter屬性讓用戶選擇某種類型的文件。

但是!這不是保證。用戶仍然可以在文件名框中輸入'(星)。(星)'並顯示所有文件。所以你應該檢查你的代碼中的結果文件。

您可以使用Path.GetExtension()方法執行此操作。

0

如上所述,您可以在打開文件對話框中應用僅顯示.xml和csv文件的過濾器。 With path.getextension http://msdn.microsoft.com/en-us/library/system.io.path.getextension.aspx您可以檢查用戶是否確實選擇了具有正確擴展名的文件。如果選擇了錯誤的擴展名,則可以提示選擇其他文件。

我強烈建議您在上傳前檢查文件擴展名。只需在用戶選擇文件後檢查擴展名即可。如果選擇了錯誤的文件,只是不要繼續上傳/處理...

0

這是完整示例

/// <summary> 
    /// Select CSV/XML file 
    /// </summary> 
    /// <param name="sender"> 
    /// The sender. 
    /// </param> 
    /// <param name="e"> 
    /// The e. 
    /// </param> 
    private void SelectCsvFile(object sender, EventArgs e) 
    { 
     var dlg = new OpenFileDialog 
         { 
          Filter = @"CSV files (*.csv)|*.csv|XML files (*.xml)|*.xml", 
          CheckFileExists = true, 
          Title = @"Select csv/xml file to read", 
          Multiselect = false 
         }; 
     dlg.ShowDialog(); 
     if (dlg.FileName == string.Empty) 
     { 
      MessageBox.Show(
       @"You didn't select any file !", 
       @"No file was selected", 
       MessageBoxButtons.OK, 
       MessageBoxIcon.Asterisk); 
     } 
     else 
     { 
      this.txtCSVFilePath.Text = dlg.FileName; 
     } 
    } 
相關問題