Liste aller vorhandenen Laufwerke



  • Sieh Dir mal

    GetCurentDrive();
    GetDriveType(NULL)
    GetVolumeInformation(...)
    

    an



  • http://www.c-plusplus.net/forum/viewtopic-var-t-is-210275.html

    Normalerweise, wenn im falschen Forum gepostet wird, wird der Beitrag kurze Zeit später verschoben.
    Ich wollte nur den Hinweis geben, dass Du dich im falschen Forum befindest.



  • Also GetLogicalDriveStrings habe ich auch schon gefunden, allerdings kann ich nicht damit umgehen 😞 Mir würde es sicher helfen an einem Beispiel zu sehen wie ich denn mit cout die Laufwerksbezeichnungen auf den Bildschirm bekomme.

    ... Danke schonmal 😉

    Sieh Dir mal

    C/C++ Code:
    GetCurentDrive();
    GetDriveType(NULL)
    GetVolumeInformation(...)

    an

    Dies würde mir ja nur das aktuelle Laufwerk zurückgeben, ich brauche aber eine Liste aller Laufwerke. Trotzdem danke...



  • Alternative: GetLogicalDrives() liefert einen 32-Bit Wert, wobei ein Bitwert gleich 1 einem vorhandenen Laufwerk entspricht:
    Bit 0 (LSB) = Laufwerk A:\
    Bit 1 = Laufwerk B:\
    Bit 2 = Laufwerk C:\
    ...
    Bit 25 = Laufwerk Z:\

    Martin



  • Dies würde mir ja nur das aktuelle Laufwerk zurückgeben

    Stimmt. Du könntest aber:

    //aktuelles holen
    int curdrive= _getdrive();
    //alle durchgehen
    for(int drive = 1; drive <= 26; drive++ )	//1=ab Laufwerk a	
    {
      if( _chdrive( drive )==0 )//0=OK
      {
         iType= GetDriveType(NULL);
         if(iType==DRIVE_REMOVABLE || iType==DRIVE_CDROM...)
         {
             //...
            GetVolumeInformation(...);
            //...
         }
      }
    }
    //aktuelles zurückschreiben
    _chdrive(curdrive);
    

    alle verfügbaren Laufwerke abfragen.



  • //aktuelles holen
    int curdrive= _getdrive();
    //alle durchgehen
    for(int drive = 1; drive <= 26; drive++ )    //1=ab Laufwerk a    
    {
      if( _chdrive( drive )==0 )//0=OK
      {
         iType= GetDriveType(NULL);
         if(iType==DRIVE_REMOVABLE || iType==DRIVE_CDROM...)
         {
             //...
            GetVolumeInformation(...);
            //...
         }
      }
    }
    //aktuelles zurückschreiben
    _chdrive(curdrive);
    

    Wenn ich die Laufwerksliste auf diese Weise umsetze bekomme ich auf jeden Fall schonmal alle Laufwerke ausgegeben. Er gibt mir nur während der Ausgabe auch noch eine Warnung (MsgBox) aus:

    Exception Processing Message c0000013 Parameters 75b0f9c 4 75b0bf9c 75b0bf9c
    Abbrechen Wiederholen Weiter

    ... wenn ich auf Weiter klicke erscheinen die Laufwerke in der Konsole.
    Kann es daran liegen dass in meinem Diskettenlaufwerk (A:) kein Datenträger zu finden ist? Wie kann ich diese Meldung umgehen?
    Geht es dass nur die Laufwerke angezeigt werden, auf denen wirklich Daten vorhanden sind? Also leere Disketten- oder CD-Laufwerke ausgeschlossen werden?



  • Klammere Deinen Code mal mit

    UINT nOldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
    
    ....
    
    SetErrorMode(nOldErrorMode);
    


  • Vielen Dank,... dat geht!!!

    Aber was hab ich da jetzt eigentlich gemacht. Bitte beschreib mir nur kurz die was diese beiden Zeilen am Anfang und am Ende des Codes bewirken.

    Danke
    Gruß Thomas



  • Einfach mal in die Doku schauen. 😉



  • krug33 schrieb:

    Aber was hab ich da jetzt eigentlich gemacht. Bitte beschreib mir nur kurz die was diese beiden Zeilen am Anfang und am Ende des Codes bewirken.
    Gruß Thomas

    http://msdn2.microsoft.com/en-us/library/ms680621.aspx


Anmelden zum Antworten