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 😉


Anmelden zum Antworten