- ベストアンサー
USBメモリが接続されているか確認するには
環境 .Net2008 C++/CLI Windowsフォームアプリケーション .NetFrameWorkは2.0で作成してます。 アプリケーションの起動時にUSBメモリがささっているか確認し、 刺さっていればアプリは続行しUSBメモリ内のCSVファイルを読み込む処理を作ろうとしているのですが、 ネットで検索してもファイルやディレクトリばかりでドライブの検索方法が見つかりませんでした。 USBはさすたびにドライブ名が変わるのでファイルパスを固定にしてファイルオープンするわけにもいかず悩んでいます。 また、 ファイル構成がまったく同じUSBが複数刺さってたらどれを読むのか?という問題があるのですがこちらもどなたかご存知の方いましたら教えてください。よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SetupDiEnumDeviceInfoなんかで列挙して、SetupDiGetDeviceRegistryPropertyで調べるとか。 http://www.usefullcode.net/2006/12/post_19.html > ファイル構成がまったく同じUSBが複数刺さってたらどれを読むのか?という問題があるのですが ファイル構成が全く同じであれば、何か識別子が無いと人間でも見分けられないですよね。 人間ができないことはコンピューターにも無理です。 何らかの識別子を用意するしかないでしょう。
その他の回答 (1)
- tanma3
- ベストアンサー率58% (14/24)
.Net FrameWorkではないですが、WM_DEVICECHANGE+DeviceIoControlを実行すれば、対象ドライブも取得できますよ。 一度、WM_DEVICECHANGEあたりでググってみて下さい。
お礼
回答ありがとうございます。 少し調べてみましたが、WM_DEVICECHANGEは ドライブの抜き差し等の変化を取得するもので、 作成中のアプリケーションは起動前というかPCの電源を入れる前から刺さっているのが前提で、途中で抜くこともない場合は変化がないから取得できない?? もう少し調べてみます。ありがとうございました。
お礼
回答ありがとうございます。 デバイスマネージャ見れるんですね…知らなかった。 結局知ってるものでできないかと試行錯誤してD~Zドライブまでファイルオープンしてみて最初に見つけたCSVファイルがあるドライブを読む処理になりました。 これだと同時にZドライブまでオープンできなかったらUSBが刺さっていないことを確認できるし、USBが複数ささっている状況でも対応できたので。 デバイスマネージャは別の処理部分で使えそうなのでそちらで使ってみます。ありがとうございました。