2012-12-25 10 views
7

Używam GetLogicalDrives() do pobierania wszystkich dysków na moim komputerze, ale ta funkcja pokazuje nie tylko gotowych do użycia woluminy, ale także puste czytniki flash bez karty. Następnie GetDriveType() pokazuje kod 2 dla takiej objętości. I to nie ma znaczenia, czy karta flash jest obecna, czy nie w gnieździe. Niektóre czytniki wielu produkują wiele takich nieistniejących dysków, pytanie, w jaki sposób określić prawidłowy stan takiej objętości.jak sprawdzić, czy pusty czytnik kart pamięci jest obecny w gnieździe USB?

Próba połączenia pod numer na takim nieistniejącym dysku powoduje błąd wizualny nawet w aplikacji konsoli: Exception Processing Message c0000013 Parameters 75b3bf7c 4 75b3bf7c 75b3bf7c Po takim błędzie kod nadal działa, ale ten denerwujący błąd pojawia się w oknie użytkownika, ponieważ aplikacja wykonałaby poważna awaria.

Tak więc jedną z metod radzenia sobie z tym byłoby użycie FindFirstFile, ale nie znam żadnego sposobu na usunięcie tego błędu z drogi użytkownika.

Odpowiedz

5

Wreszcie znalazłem! Kluczem do sukcesu tutaj jest GetVolumeInformation().

Zwraca 0 i ustawia ostatni błąd na 21, gdy w gnieździe USB jest pusty czytnik kart. :)

1

Oto kilka doskonałych możliwości:

w szczególności:

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

wartości zwracane z funkcji:

DRIVE_UNKNOWN 0: TH Nie można określić typu napędu.

DRIVE_NO_ROOT_DIR 1: Ścieżka root jest nieprawidłowa; na przykład nie ma woluminu zamontowanego na określonej ścieżce.

DRIVE_REMOVABLE 2: Napęd ma wymienne nośniki; na przykład stacja dyskietek, czytnik kart pamięci lub czytnik kart pamięci flash.

DRIVE_FIXED 3: Napęd ma stałe nośniki; na przykład dysk twardy lub dysk flash.

DRIVE_REMOTE 4: Dysk jest napędem zdalnym (sieciowym).

DRIVE_CDROM 5: Napęd jest napędem CD-ROM.

DRIVE_RAMDISK 6: Napęd jest dyskiem RAM.

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

+0

Czekajcie, ja * wiem * że napęd to USB typu 2, ale może to być czytnik kart pamięci lub czytnik USB z kartą flash, a nie wszystko, ale chcę wiedzieć, że karta jest obecny lub jest to tylko symbol zastępczy dysku czytelnik-dummy. – rsk82

Powiązane problemy