Verzeichnis auslesen lassen.



  • Hallo Leute,

    void VerzeichnisAuslesen()
    {
    	HRESULT hResult;
    	HANDLE hHandle;
    	WIN32_FIND_DATA FindData;
    	char Path[1024];
    
    	hResult = SHGetFolderPath( NULL, CSIDL_PROGRAM_FILES, NULL, NULL, Path );
    
    	hHandle = FindFirstFile( (LPSTR)Path, &FindData );
    
    	do
    	{
    		if( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
    		{
    			cout << "Ordner: " << FindData.cFileName << endl;
    		}
    		else
    		{
    			cout << "Datei: " << FindData.cFileName << endl;
    		}
    	}
    	while( FindNextFile( hHandle, &FindData ) );
    
    	FindClose( hHandle );
    }
    

    Das wäre soweit meine Funktion, um den Pfadnamen herrauszufinden. Jetzt will ich diesen Pfad öffnen lassen, um das Verzeichnis auslesen zu können.
    Dabei kommt in diesem Fall nur "Ordner: Program Files x86".

    Jetzt die Frage: Wie lass ich den Pfad zuerst öffnen, bevor er ausgelesen werden soll, sodass auch wirklich die beinhalteten Dateien aufgelistet werden??

    Mit Freundlich Grüßen. 🙂



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • AnnoyingApfelmus schrieb:

    hResult = SHGetFolderPath( NULL, CSIDL_PROGRAM_FILES, NULL, NULL, Path );
    
    	hHandle = FindFirstFile( (LPSTR)Path, &FindData );
    

    Schreib mal dazwischen:

    strcat (Path,"\\*");
    

    Erklärung: FindFirstFile sucht nach einem bestimmten Namen. Mit dem Wildcard-Zeichen '*' lässt Du alle Namen finden, die Du dann später aussortierst.

    Wenn Du Dir nicht irgendwann gehässige Kommentare im C++-Forum einfangen willst, dann steige von char [] (C) auf string (C++) um. Die Behandlung von string ist allerdings zunächst ungewohnt.

    viele grüße
    ralph



  • Alles klar. Danke für die schnelle Antwort, es funktioniert auch.

    Auch nett der Hinweis auf die Verwendung von Strings.
    Aber wenn ich da einen String verwende, muss ich den dann nicht trotzdem erst nach const char* konvertieren mit c_str()und dann nochmal in SHGetFolderPath()und FindFirstFile() umkonvertieren??

    Oder geht das noch einfacher??

    Liebe Grüße



  • AnnoyingApfelmus schrieb:

    Auch nett der Hinweis auf die Verwendung von Strings.
    Aber wenn ich da einen String verwende, muss ich den dann nicht trotzdem erst nach const char* konvertieren mit c_str()und dann nochmal in SHGetFolderPath()und FindFirstFile() umkonvertieren??

    Ja, für das Beispiel wäre das auch etwas überzogen. Wenn Du allerdings die C-WinAPI verlässt und in Deine eigene C++-Logik einsteigst (z. B. cout), dann würde eine Konvertierung nicht schlecht aussehen. Ich selbst sehe das nicht so eng, aber andere... 😉 .

    viele grüße
    ralph



  • rkhb schrieb:

    AnnoyingApfelmus schrieb:

    Auch nett der Hinweis auf die Verwendung von Strings.
    Aber wenn ich da einen String verwende, muss ich den dann nicht trotzdem erst nach const char* konvertieren mit c_str()und dann nochmal in SHGetFolderPath()und FindFirstFile() umkonvertieren??

    Ja, für das Beispiel wäre das auch etwas überzogen. Wenn Du allerdings die C-WinAPI verlässt und in Deine eigene C++-Logik einsteigst (z. B. cout), dann würde eine Konvertierung nicht schlecht aussehen. Ich selbst sehe das nicht so eng, aber andere... 😉 .

    viele grüße
    ralph

    Oder einfach gleich C verwenden. Dann aber printf. 🙂


Anmelden zum Antworten