FindFirstFile()



  • Hallo zusammen. Ich habe folgendes Problem.
    Ziel ist zu prüfen ob der Ordner (hier "juk") leer ist. Für das Beispiel ist der Ordner leer aber der Fall tritt nicht ein. Welchen Fehler mache ich?

    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
    #include <conio.h>
    
    void GetFileList() 
    {
    	WIN32_FIND_DATA		w32d;
    	std::string		data_dir	= "C:\\juk\\*.*";
    	HANDLE			hFind		= FindFirstFile(data_dir.c_str(), &w32d);
    
    	if (!hFind) { 
    		printf("Ordner ist leer!");
    		FindClose(hFind);
    		return;
    	} 
    	FindClose(hFind);
    	return;
    }
    
    int main(void)
    {
    	GetFileList();
    	_getch();
            return 0;
    }
    


  • Du wirst in jedem Ordner die beiden Ordner aktueller Ordner und übergeordneter Ordner

    .
    

    und

    ..
    

    finden. Prüfe darauf und überlies diese.



  • Da du ja mit C++ unterwegs bist, kannst du das übrigens auch mit einfachen Bordmitteln lösen:

    #include <string>
    #include <filesystem>
    
    bool isEmpty(const std::string &path)
    {
        for(const auto &p : std::filesystem::directory_iterator(path))
        {
            if(p.path() != "." && p.path() != "..")
                return false;
        }
        return true;
    }
    
    int main()
    {
        std::cout << isEmpty("C:/test");
        std::cout << isEmpty("C:/qs");
        std::cin.get();
    }
    

    Möglicherweise ist dein Toolchain noch nicht bereit für C++17, weshalb <filesystem> in <experimental/filesystem> bzw. std::filesystem in std::experimental::filesystem geändert werden muss.



  • Danke für eure Antworten 🙂

    Das Problem hat sich nun gelöst


Log in to reply