2012-08-24 17 views
10

このC#windowsフォームアプリケーションでは、いくつかのタスク操作のためにXMLファイルまたはCSVファイルをロードします。ブラウズボタンがあります。 [参照]ボタンをクリックすると、[ファイルを開く]ダイアログボックスが表示され、ドライブ上のある場所に移動してファイルを選択し、[アップロード]ボタンを使用してアップロードできます。 JPG、ZIPファイル、またはCSVやXML以外の形式のファイルを読み込むと、アプリケーションがクラッシュします。 C#でCSVファイルまたはXMlファイルだけを開くようにファイルを開くダイアログボックスを制限する方法はありますか?Open FIleダイアログボックスを使用して選択できるファイルを制限する

+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; 
     } 
    } 
関連する問題