Ist ein Laufwerk ein USB-Stick?
-
Tach!
Der Titel sagt's: wie kann ich bei einem Laufwerk feststellen, ob es ein USB-Stick ist?
-
Keine Ahnung,
aber mich würd interessieren wofür man sowas braucht?
-
sulmer schrieb:
Keine Ahnung,
aber mich würd interessieren wofür man sowas braucht?Wir speichern mit unserer Software u.a. Kalibrierungsdateien. Neuerdings kann das auch ein USB-Stick sein (PC kann einfacher getauscht werden). Da neben diesen klitzekleinen Dateien aber auch riesengroße Bitmaps gespeichert werden, ist so ein Stick eventuell nach einer Weile voll. Deshalb muss ich jetzt dafür sorgen, dass die Kali-Dateien auf dem Stick, die Bitmaps aber lokal gespeichert werden. Zusätzlich soll noch eine lokale Sicherung gemacht werden. Unsere Kunden haben (leider) die absolute Freiheit, was Ziellaufwerk und -verzeichnis angeht.
Ich hab auch gerade was zu dem Thema gefunden, falls es einen interessiert:
-
Komisch, ich dachte ich hätte den Code aus der FAQ aber ich finde es nicht.
Na egal, hier hab ich was für euch:for(char rootnum = _T('C'); rootnum <= _T('Z'); ++rootnum) { CString rootname; rootname.Format("%c:",rootnum); UINT type = GetDriveType(rootname); // DRIVE_UNKNOWN The drive type cannot be determined. // DRIVE_NO_ROOT_DIR The root path is invalid. For example, // no volume is mounted at the path. // DRIVE_REMOVABLE The disk can be removed from the drive. // DRIVE_FIXED The disk cannot be removed from the drive. // DRIVE_REMOTE The drive is a remote (network) drive. // DRIVE_CDROM The drive is a CD-ROM drive. // DRIVE_RAMDISK The drive is a RAM disk. if (type == DRIVE_REMOVABLE) { // m_cbxLaufwerk.AddString(rootname + ((type == DRIVE_REMOTE) ? _T(" Netzlaufwerk") : _T(" Wechseldatenträger"))); char VolumeNameBuffer[256]; // address of name of the volume DWORD VolumeSerialNumber; // address of volume serial number DWORD MaximumComponentLength; // address of system's maximum filename length DWORD FileSystemFlags; // address of file system flags char FileSystemNameBuffer[256]; // address of name of file system ULARGE_INTEGER TotalNumberOfFreeBytes; ULARGE_INTEGER TotalNumberOfBytes; if (GetDiskFreeSpaceEx(rootname,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes)) { int nProzentFrei = ((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20) * 100) / (int)Int64ShrlMod32(TotalNumberOfBytes.QuadPart,20); CString strMsg; strMsg.Format(_T(" (%d MB frei)"), (int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)); GetVolumeInformation(rootname,VolumeNameBuffer,255, &VolumeSerialNumber,&MaximumComponentLength, &FileSystemFlags,FileSystemNameBuffer,255 ); m_cbxLaufwerk.AddString(rootname + " " + VolumeNameBuffer + strMsg); } } }Das ist einfach aus meinem einen Projekt rauskopiert.
Ich fülle da eine Combobox mit allen am PC gefundenen Wechseldatenträgern (Buchstabe, Bezeichnung, freier Speicher). Das können USB-Sticks sein aber auch eine Karte im Kartenleser.Den auskommentierten Teil mit den Netzlaufwerken könnt ihr ignorieren. Vielleicht sucht ja einer auch mal sowas.

PS: Wofür man sowas braucht? Na, der Code oben ist aus dem Datensicherungsprogramm was die Daten bestimmter Programme zusammensammelt und dann auf einen Wechseldatenträger kopiert.
Mit der Combobox kann man dann wählen welches das Ziellaufwerk ist.
-
Danke estartu, werde ich gleich mal testen!