FindFirstFileW / FindNextFileW: Problem



  • Hallo Leute.

    Ich möchte ein Unicode-fähiges Prog erstellen, darum habe ich den code wie folgt gestaltet:

    {
    	WIN32_FIND_DATAW findData;
    
    	HANDLE hFind = FindFirstFileW(lpDirectory, &findData);
    
    	if (hFind == NULL)
    		return;
    
    	do
    	{
    		if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    		{
    			MessageBoxW(NULL, findData.cFileName, L"Fehler", MB_OK);
    		}
    	}
    	while (FindNextFileW(hFind, &findData));
    }
    

    Aber das Problem ist, dass die MessageBox gar nicht erst erscheint, ob wohl das Verzeichnis korrekt angegeben wird, aber wenn ich die If-Anweisung entferne, erscheint eine MessageBox mit kryptischen Zeichen.

    Was kann ich tun?

    VIelen Danke.



  • Bau das mal um dann sollte es laufen

    {
    	WIN32_FIND_DATAW findData;
             BOOL Next;
    
    	HANDLE hFind = FindFirstFileW(lpDirectory, &findData);
    
    	if (hFind == NULL)
    		return;
    
    	do
    	{
                      Next = FindNextFileW(hFind, &findData));
    		if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    		{
    			MessageBoxW(NULL, findData.cFileName, L"Fehler", MB_OK);
    		}
    	}
    	while (Next)
    }
    

    is auch so in der MSDN beschrieben

    Gruß Matthias



  • die ersten 2 files die du findest sind
    '.' und '..'

    du musst als insgesamt 3x lesen bis du die erste datei hast in dem verzeichnis.



  • Also ich persönlich würde ja Linux nehmen, nur echt mit dem GNU-Qualitätssiegel.



    1. lpDirectory muss eine Dateimaske enthalten, ansonsten wird nur ein Treffer gefunden.
    2. Im Fehlerfall gibt FindFirstFile den Wert INVALID_HANDLE_VALUE zurück und nicht NULL.
    3. Das FindClose fehlt.
    WIN32_FIND_DATAW findData; 
    
    	HANDLE hFind = FindFirstFileW(L"C:\\*.*", &findData); 
    	if (INVALID_HANDLE_VALUE != hFind)
    	{
    		do 
    		{ 
    			if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
    			{ 
    				MessageBoxW(NULL, findData.cFileName, L"Fehler", MB_OK); 
    			} 
    		} 
    		while (FindNextFileW(hFind, &findData)); 
    
    		FindClose(hFind);
    	}
    

Anmelden zum Antworten