GetVolumeInformation richtig benutzen
-
Hallo,
ich habe in kleines Consolenprg erstellt mit dem ich nichts weiter als die ApiFunktion "GetVolumeInformation" benutzen möchte um folgende Ausgabe auf der Console zu erhalten :
3 1/2-Diskette(A)
Lokaler Datenträger(C)
CD/DVD(D)
Pagesys(E)
Datastorage(F)Hier mal der Code:
#include <windows.h> #include <iostream.h> #include <stdio.h> int main() { DWORD dwVolumeSerialNumber; DWORD dwMaxNameLength; DWORD dwFileSystemFlags; TCHAR szFileSysName[128]; TCHAR szLabel[128]; char szBuffer[MAX_PATH+100]; if ( !GetVolumeInformation( szBuffer, szLabel, sizeof( szLabel ) - 1, &dwVolumeSerialNumber, &dwMaxNameLength, &dwFileSystemFlags, szFileSysName, sizeof( szFileSysName ) - 1 ) ) { szLabel[0] = 0; szFileSysName[0] = 0; } cout << szLabel << endl; return 0; }
leider funktioniert das nicht
Könnt Ihr mir da behilflich sein ?
Vielen Dank schon mal
ShadowEater
-
Die Doku sagt zum ersten Parameter:
lpRootPathName
[in] A pointer to a string that contains the root directory of the volume to be described.
...Du übergibst ein Array mit uninitialisiertem Inhalt.
-
Hi MKK,
danke für die schnelle Antwort, ich habs in der Doku gefunden und es so probiert :
char szBuffer[MAX_PATH+100] = "C:\";
Jetzt bekomme ich aber folgende zwei Fehlermeldungen :
Zeilenumbruch innerhalb einer Konstanten
Syntaxfehler : Fehlendes ';' vor 'if'
Ich glaube die 2. ist nur ein Folgefehler, aber was ist mit der ersten fehlermeldung ???
Danke Vorab für Deine / Eure Hilfe
Gruß
ShadowEater
-
char szBuffer[MAX_PATH+100] = "C:\\"; // <----
Wenn du nur ein '\' schreibst, wird das '"' als zeichen und nicht als abschluss des Strings gewertet...
-
Hi Argus Magnus,
ja grad hab ichs gefunden, ich hab's die ganze Zeit übersehen
Danke für Deinen HinweisDas ganze stellt sich nun wie folgt dar :
#include <windows.h> #include <iostream.h> #include <stdio.h> int main() { DWORD dwVolumeSerialNumber; DWORD dwMaxNameLength; DWORD dwFileSystemFlags; TCHAR szFileSysName[128]; TCHAR szLabel[128]; char szBuffer[MAX_PATH+100] = "C:\\"; if ( !GetVolumeInformation( szBuffer, szLabel, sizeof( szLabel ) - 1, &dwVolumeSerialNumber, &dwMaxNameLength, &dwFileSystemFlags, szFileSysName, sizeof( szFileSysName ) - 1 ) ) { szLabel[0] = 0; szFileSysName[0] = 0; } cout << szLabel << endl; cout << szFileSysName << endl; return 0; }
Den szFileSysName kann ich wunderbar auslesen aber das szLabel nicht, in derv 1. Zeile steht nichts obwohl "C" das Label "Lokaler Datenträger" hat
Was läuft da schief, beim einen klappts beim anderen nicht !
Vielen dank für Deine / Eure hilfe
ratlos
ShadowEater
-
Kann das daran liegen, dass "C:\" Volume ist in dem Windows installiert ist
Denn mit "F:\" klappts hervorragend !
#include <windows.h> #include <iostream.h> #include <stdio.h> int main() { DWORD dwVolumeSerialNumber; DWORD dwMaxNameLength; DWORD dwFileSystemFlags; TCHAR szFileSysName[128]; TCHAR szLabel[128]; char szBuffer[MAX_PATH+100] = "F:\\"; if ( !GetVolumeInformation( szBuffer, szLabel, sizeof( szLabel ) - 1, &dwVolumeSerialNumber, &dwMaxNameLength, &dwFileSystemFlags, szFileSysName, sizeof( szFileSysName ) - 1 ) ) { szLabel[0] = 0; szFileSysName[0] = 0; } cout << szLabel << endl; cout << szFileSysName << endl; return 0; }
Gruß
Shadow Eater