とっておきの手土産を教えて

環境
.Net2008 C++/CLI Windowsフォームアプリケーション
.NetFrameWorkは2.0で作成してます。

アプリケーションの起動時にUSBメモリがささっているか確認し、
刺さっていればアプリは続行しUSBメモリ内のCSVファイルを読み込む処理を作ろうとしているのですが、
ネットで検索してもファイルやディレクトリばかりでドライブの検索方法が見つかりませんでした。
USBはさすたびにドライブ名が変わるのでファイルパスを固定にしてファイルオープンするわけにもいかず悩んでいます。
また、
ファイル構成がまったく同じUSBが複数刺さってたらどれを読むのか?という問題があるのですがこちらもどなたかご存知の方いましたら教えてください。よろしくお願い致します。

A 回答 (2件)

SetupDiEnumDeviceInfoなんかで列挙して、SetupDiGetDeviceRegistryPropertyで調べるとか。


http://www.usefullcode.net/2006/12/post_19.html

> ファイル構成がまったく同じUSBが複数刺さってたらどれを読むのか?という問題があるのですが

ファイル構成が全く同じであれば、何か識別子が無いと人間でも見分けられないですよね。
人間ができないことはコンピューターにも無理です。
何らかの識別子を用意するしかないでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

デバイスマネージャ見れるんですね…知らなかった。

結局知ってるものでできないかと試行錯誤してD~Zドライブまでファイルオープンしてみて最初に見つけたCSVファイルがあるドライブを読む処理になりました。
これだと同時にZドライブまでオープンできなかったらUSBが刺さっていないことを確認できるし、USBが複数ささっている状況でも対応できたので。

デバイスマネージャは別の処理部分で使えそうなのでそちらで使ってみます。ありがとうございました。

お礼日時:2008/08/07 22:11

.Net FrameWorkではないですが、WM_DEVICECHANGE+DeviceIoControlを実行すれば、対象ドライブも取得できますよ。



一度、WM_DEVICECHANGEあたりでググってみて下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

少し調べてみましたが、WM_DEVICECHANGEは
ドライブの抜き差し等の変化を取得するもので、
作成中のアプリケーションは起動前というかPCの電源を入れる前から刺さっているのが前提で、途中で抜くこともない場合は変化がないから取得できない??

もう少し調べてみます。ありがとうございました。

お礼日時:2008/08/06 23:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報