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 Hinweis
Das 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