C++, Test ob Floppy oder USB-STICK

sand13r

Erfahrenes Mitglied
Hallihallo Freunde der Sonne,

ich habe ein kleines Problem und hatte gehofft das mir jemand auf die Sprünge helfen könnte , ein Tipp oder Denkanstoß wäre wirklich klasse.

Es geht im Prinzip nur darum das wir einen eigenen Browsforfolder haben wo die einzelnen Laufwerke drinstehen nun soll hinter dem USB-STICK (falls angeschlossen) USB GErät stehen. Nun die Frage woher weis ich ob es ein USB Stick ist?

Ich habe mit Hilfe von DriveType schon raus bekommen welche Datenträger entfernbar sind.

Code:
  driveType = GetDriveType(drive);
    if(driveType == DRIVE_REMOVABLE) // The drive has removable media
      {
         driveFound=TRUE;
         break;
      }

nun ist mein Problem das er bei einem Diskettenlaufwerk auch nur DRIVE_REMOVABLE zurückgibt sowie auch beim USB-STICK..


hätte jemand ne Idee wie ich raus bekomme welches die Diskette ist ?

Ich dachte ich schau einfach welcher Datenträger über 5MB is.. dann isses sicher keine FLOPPY funktioniert aber nicht wenn keine Diskette im Laufwerk is dann haut er mir ne fette Exception die ich irgendwie nich gebacken bekomme...

Wäre um jeden Tipp dankbar



greetz sand13r
 
Zuletzt bearbeitet:
Hallo,

Diskettenlaufwerke belegen üblicherweise die LW-Buchstaben A und B. Wenn hier ein Removable gefunden wird, dürfte es mit ziemlicher Sicherheit ein Floppy-LW sein. Alles andere dürften dann andere Wechseldatenträger sein, allerdings auch nicht zwangsläufig USB-LWs.
Ansonsten könntest du ja auch mit "_access()" nachschauen, ob der Pfad überhaupt zugreifbar ist, bevor du die Größe ermitteln willst.

Gruß
MCoder
 
Hallihallo danke für deine wie immer hilfreiche, und schnelle Antwort :D

ich habe es jetzt mit _access versucht aber er wirft mir die selbe Exception wenn er keinen zu griff darauf hat.

wüsstest du zufällig wie ich den try catch block bauen müsste ?
habs schon so versucht geht aber net


Code:
   try
   {
      GetDiskFreeSpaceEx("A:\\",&freespace,&totalspace,&usedspace); //oder eben  _access("A:\\",00);
      
   }
   catch(CUserException *e)
   {
      e->Delete();
   }

bin noch nicht so geübt in exceptions.

ich benutze MSVISUAL 6.0 und er sagt das der catch Block keinen Typ angibt und CUserException unexpected wäre...


F:\Testumgebung\testConsoleApi\testConsoleApi.cpp(41) : error C2061: syntax error : identifier 'CUserException'
F:\Testumgebung\testConsoleApi\testConsoleApi.cpp(41) : error C2310: catch handlers must specify one type
F:\Testumgebung\testConsoleApi\testConsoleApi.cpp(43) : error C2065: 'e' : undeclared identifier
F:\Testumgebung\testConsoleApi\testConsoleApi.cpp(43) : error C2227: left of '->Delete' must point to class/struct/union
F:\Testumgebung\testConsoleApi\testConsoleApi.cpp(46) : error C2317: 'try' block starting on line '37' has no catch handlers



danke nochmals

gruss
 
Zuletzt bearbeitet:
Hallo,

die Fehlerunterdrückung ist an der Stelle etwas tricky, weil try-catch blöderweise nicht die Fehler-Messagebox unterdrückt.
Aber so müsste es gehen:
C++:
UINT nOldError = SetErrorMode(SEM_FAILCRITICALERRORS);

try
{
    GetDiskFreeSpaceEx("A:\\", &freespace, &totalspace, &usedspace);
}
catch( ... )
{
  // Fehler
}

SetErrorMode(nOldError);
Gruß
MCoder
 
Woah du bist wirklich super,

vielen vielen vielen vielen vielen DANK wirklich perfekt :D

hat blendend funktioniert :D

wieso kann ich dich nich weider gut bewerten.. Gemeinheit.. muss erst andere bewerten.. toll wenn du mir aba imma hilfst :D

DANKE nochmals,

wünsche dir einen wunderschönen Feierabend (wenn es denn dann soweit ist)

greetz sand13r
 
Zurück