0

重複の可能性:
リムーバブル ドライブ (USB フラッシュ) を検出するための C# コードを探しています

私は C# と WPF で働いています。私のアプリケーションには、コンピューターに接続されているすべてのドライブを表示し、ユーザーが特定のフォルダーに移動できるようにするカスタム ダイアログがあり、そこでプロセスによってファイルが出力されます。共通のフォルダー ピッカー ダイアログを使用していないのは、その共通のダイアログに含まれていない機能が必要であり、ダイアログの外観をアプリケーションのスタイルと一致させる必要があるためです。

この機能の目的は、ユーザーがデータをサム ドライブにエクスポートできるようにすることです。そのため、新しいドライブが利用可能になったときにアプリケーションが通知を受け取るようにしたいと考えています。文字列 "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" を使用して、MyComputer 特殊フォルダーを内部的に表しています。

この同じ文字列をクラスのインスタンスに渡そうとしましたFileSystemWatcherが、これは文字列が有効なパスではないことを示しています。だから、この方法で私が望むものを達成できないようです。

新しいサム ドライブがコンピューターに追加されたという通知を OS から受け取り、それを自分のTreeViewコントロールに追加する正しい方法は何ですか?

4

1 に答える 1

2

文字列「...」を使用して、MyComputer の特別なフォルダーを内部的に表しています。

これは機能しません。これは実際には特別なフォルダーであり、実際にはファイル システムには存在しません。これらは、Windows エクスプローラーの仮想フォルダーであり、シェル名前空間拡張によって実装されます。プレゼンテーションは便利で、「物はフォルダーに保存される」パラダイムの一貫したビューを提供できます。ただし、ファイル システムに実際のフォルダーがないと、FileSystemWatcher は変更通知を生成できません。

ドライブ接続通知を取得するには、プラグ アンド プレイ イベントをリッスンする必要があります。これは通常、WM_DEVICECHANGE メッセージで始まります。このコードを自分で書かなければならないわけではありません。セットアップ API は非常にザラザラしていて、pinvoke は困難です。C# プログラムで簡単に使用できるようにするために、これまで何度もラップされてきました。質問のコメントにあるリンクに従ってください。

于 2013-01-23T17:27:15.107 に答える