Rekursion funktioniert nicht



  • N'abend

    ich habe eine Rekursion erstellt, die einen Pfad durchsucht.

    Das Problem ist, dass irgendwelche Speicherlecks auftreten.

    void RecursiveSearch(LPWSTR lpPath, LPWSTR lpFilter, LPWSTR lpDestination)
    {
    	WCHAR search[MAX_PATH + 1];
    	lstrcpy(search, lpPath);
    	if (search[wcslen(search) - 1] != L'\\')
    		lstrcat(search, L"\\");
    	lstrcat(search, lpFilter);
    
    	WIN32_FIND_DATA findData;
    	HANDLE hFind = FindFirstFile(search, &findData);
    	WCHAR path[MAX_PATH + 1];
    
    	do
    	{
    		if ((findData.cFileName[0] != L'.') ||
    			((lstrlen(findData.cFileName) > 1) && (findData.cFileName[0] != L'.')) ||
    			(lstrlen(findData.cFileName) > 2))
    		{
    			lstrcpy(path, lpPath);
    			if (path[wcslen(path) - 1] != L'\\')
    				lstrcat(path, L"\\");
    			lstrcat(path, findData.cFileName);
    
    			if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    			{
    				RecursiveSearch(path, lpFilter, lpDestination);
    			}
    			else
    			{
    				MoveFound(path, lpDestination);
    			}
    		}
    	}
    	while (FindNextFile(hFind, &findData));
    }
    

    Vielen Dank.



  • "irgendwelche speicherlecks".. das sind ja mal richtig geile fehlerbeschreibungen. da kann dir jeder sofort helfen 🙄 🙄 🙄



  • Wenn Du Resourcen anforderst (vom OS), dann müssen die wieder freigegeben werden, wenn sie nicht mehr benötigt werden:

    http://msdn2.microsoft.com/en-us/library/aa364418.aspx

    FindFirstFile erfordert ein FindClose !!!

    Simon



  • Gut, sry.

    Das FindClose habe ich hinzugefügt.
    Der Fehler tritt bei FindNextFile auf. ich weiß wirklich nicht, woran es denn liegen könnte.



  • Der Fehler tritt bei FindNextFile auf. ich weiß wirklich nicht, woran es denn liegen könnte.

    Welcher Fehler... beschreibe das genauer.



  • Ev. sind falsch od. nicht NULL- terminierte strings dafür (wofür???) verantwortlich...


Anmelden zum Antworten