7

以前はコンピューターのすべてのドライブを取得していましたが、その機能は、使用GetLogicalDrives()可能なボリュームが存在するだけでなく、カードが入っていない空のフラッシュ リーダーも表示します。次に、そのGetDriveType()ようなボリュームのコード 2 を示します。そして、フラッシュ カードがスロットに存在するかどうかは関係ありません。一部のマルチリーダーは、そのような存在しないドライブを多数生成します。問題は、そのようなボリュームの正しいステータスをどのように判断できるかです。

このような存在しないドライブを呼び出そうとするとFindFirstFile()、コンソール アプリでも視覚的なエラーが発生します。Exception Processing Message c0000013 Parameters 75b3bf7c 4 75b3bf7c 75b3bf7cこのようなエラーの後、コードは引き続き実行されますが、アプリが重大なクラッシュを起こすため、この迷惑なエラーがウィンドウに表示されます。

したがって、これを処理する 1 つの方法は FindFirstFile を使用することですが、そのエラーをユーザーの邪魔にならないようにする方法はわかりません。

4

2 に答える 2

5

やっと見つけた!ここでの成功の鍵はGetVolumeInformation().

USB スロットに空のカード リーダーがある場合、0 を返し、最後のエラーを 21 に設定します。:)

于 2012-12-25T15:05:54.307 に答える
1

ここにいくつかの優れた選択肢があります:

特に:

if( 2 == ::getDriveType( <driveletter> ))

関数の戻り値:

DRIVE_UNKNOWN 0: ドライブの種類を判別できません。

DRIVE_NO_ROOT_DIR 1: ルート パスが無効です。たとえば、指定されたパスにボリュームがマウントされていません。

DRIVE_REMOVABLE 2: ドライブにはリムーバブル メディアがあります。たとえば、フロッピー ドライブ、サム ドライブ、フラッシュ カード リーダーなどです。

DRIVE_FIXED 3: ドライブにはメディアが固定されています。たとえば、ハード ディスク ドライブやフラッシュ ドライブなどです。

DRIVE_REMOTE 4: ドライブはリモート (ネットワーク) ドライブです。

DRIVE_CDROM 5: ドライブは CD-ROM ドライブです。

DRIVE_RAMDISK 6: ドライブは RAM ディスクです。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx

于 2012-12-25T00:25:51.327 に答える