4

C# プログラムに次のコードがあります。

        OpenFileDialog fDialog = new OpenFileDialog();
        fDialog.Title = "Open a file";
        fDialog.Filter =
           "NCF files (*.ncf)|*.ncf|All files (*.*)|*.*|No Extensions (*.)|*.";



ユーザーが次から選択できるようにしたい:

*.NCF (拡張子が .NCF のファイルのみ)
**.* (すべてのファイル)

filewithnoextension ***. *がこれを実行することはわかって ますが、.NCF、.TXT、および同じディレクトリ内の他のすべてのファイルも表示されます。 拡張子のないファイル名を表示できるようにしたいだけです。 * でフィルタリングします。トリックはしません。DOS ウィンドウ ( dir *. ) で実行すると問題なく動作しますが、C# は *. を無視するようです。フィルター。















C#でこれを行う方法はありますか?

ありがとう。

4

4 に答える 4

1

通常、readme ファイルには拡張子が付いています。知っていると思いますが、既知のファイル タイプの拡張子を表示するために、このフォルダー オプションをオンにしましたか? 何か変わった?

編集#1

率直に言って、 Filterプロパティは拡張子に基づいているため、拡張子のないOpenFileDialog表示ファイルを作成できるとは思えません。

System.IOたとえば、などの名前空間オブジェクトを使用して、独自に実装された OpenFileDialog のベースを継承すると、参照DirectoryInfoしたフォルダー ファイルをGetfiles()メソッドで取得し、LINQ を介して自分自身をフィルター処理して、FileInfo.Extensionプロパティのみで拡張子のないファイルを表示できます。

編集#2

OpenFileDialog は seal であるためネストされた型として使用し、このネストされた型を使用して独自のメソッドを実装できます。

これがお役に立てば幸いです。

于 2010-05-18T01:05:24.463 に答える
0

を使えばうまくいくと思っ*.たのですが、うまくいかないので、それはOpenFileDialogコントロールの制限のようです。

独自のダイアログを作成することもできますが、OpenFileDialogこれは継承できないため、小さな機能のためだけに多くの作業が必要になります。

独自のアプリケーションで作成された拡張子のないファイルですか? その場合は、フィルタリング用のカスタム拡張機能を指定できます。そうでない場合は、申し訳ありませんが、あなたを助けるために他に何も考えられません:(

幸運を!

于 2010-05-18T01:37:57.577 に答える
0

他のソフトウェア プログラムがこれらのファイルを同じ場所に作成する場合、コードでそのフォルダー内の拡張子のないすべてのファイルに拡張子 (「.XXX」などの無害なもの) を追加してから、ダイアログを表示してみませんか?

編集: または、この MSDN の記事を参照してください。

http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx

[フィルター] セクションから:

CDN_INCLUDEITEM 通知メッセージは、ダイアログ ボックスに表示される名前をフィルター処理する別の方法を提供します。このメッセージを使用するには、ダイアログ ボックスを作成するときに、OFNHookProc フック プロシージャを提供し、OPENFILENAME 構造体に OFN_ENABLEINCLUDENOTIFY フラグを指定します。ユーザーがフォルダーを開くたびに、ダイアログ ボックスは、新しく開いたフォルダー内の各アイテムのフック プロシージャに CDN_INCLUDEITEM 通知を送信します。フック プロシージャの戻り値は、ダイアログ ボックスがフォルダーのアイテム リストにアイテムを表示するかどうかを示します。

Explorer-Style Hook Proceduresセクションの下部にあるこの記事では、これを行う方法について説明しています。基本的に、イベント ハンドラーを OpenFile ダイアログに渡します。ユーザーが新しいフォルダーに移動するたびに、ダイアログはフォルダー内のすべてのファイルを反復処理し、それぞれのイベント ハンドラーを呼び出します。イベント ハンドラー内にコードを配置して、ファイルに拡張子があるかどうかを判断し、それに応じて true または false を返します。

于 2010-05-18T01:44:53.690 に答える