Hilfe! - FindNextFile findet nichts

JRKleemann

Grünschnabel
Hallo erstmal,

ich hab da ein Problem. Ich versuche grad mit FindFirstFile und FindNextFile die Dateien in Ordnern aufzulisten. Das Problem das ich dabei hab ist, dass das Programm immer nur eine Datei (mit FindFirstFile) findet, aber FindNextFile sagt direkt, es gäbe keine weiteren Dateien mehr (Fehlercode 18 mit GetLastError()), obwohl ich es mit Ordnern probiert habe, in denen reichlich Dateien vorhanden sind.

Der Code ist eine leicht gekürzte Fassung aus MSDN
http://msdn2.microsoft.com/en-us/library/aa365200(VS.85).aspx

Suche jetzt schon eine ganze Weile mit Google, aber hab nichts zu diesem Problem gefunden.

Ich benutze MinGW, Eclipse und Windows Vista, falls das von belang ist.

Hier mal der Code, den ich benutze:
Code:
#define _WIN32_WINNT 0x0600
#include <windows.h>
#include <tchar.h> 
#include <stdio.h>


using namespace std;

int main(int argc, TCHAR **argv) 
{
	WIN32_FIND_DATA ffd;
	size_t length_of_arg;
	HANDLE hFind = INVALID_HANDLE_VALUE;
	DWORD dwError=0;
	
	// Find the first file in the directory.
	hFind = FindFirstFile(argv[1], &ffd);

	if (INVALID_HANDLE_VALUE == hFind) 
	{
		dwError = GetLastError();

		_tprintf (TEXT("FindFirstFile failed (%u)\n"), dwError);
		return dwError;
	} 
	else
	{
		_tprintf (TEXT("First file: %s\n"), ffd.cFileName);
   
      // List all the other files in the directory.

		while (FindNextFile(hFind, &ffd) != 0) 
		{
			_tprintf (TEXT(" Next file: %s\n"), ffd.cFileName);
		}
	
		dwError = GetLastError();
		if (dwError != ERROR_NO_MORE_FILES) 
		{
			_tprintf (TEXT("FindNextFile error (%u)\n"), dwError);
			goto Cleanup;
		}
	}

Cleanup:
	FindClose(hFind);
	return 0;
}

Gruß
Jan
 
Als Parameter hab ich es unter anderem mit "C:\*" und C:\*.*" probiert. Und das gleiche mit dem Projektverzeichnis des C++ Programms (Also auch mit * und *.*, und hier auch zb mit *.h).

Also eigentlich genauso wie im Beispielcode auf MSDN (Da fügen die ja noch ein "\*" im Code dran).

Wie gesagt, eine Datei findet das Programm ja immer, mit FindFirstFile. Nur FindNextFile gibt dann immer einen Fehler aus (ERROR_NO_MORE_FILES).


Gruß
Jan
 
Hm. Das ist schon etwas merkwürdig. Bei mir funktioniert dein Programm so wie es sollte. (Windows XP, Visual C 6)

Bist du dir sicher, das du auch das aktuellste Programm startest und nicht zufällig eine alte Version verwendest?

Wenn du das Programm aus dem MSDN unverändert übernimmst, funktioniert es dann auch nicht?

Gruß
 
Ja, ich benutz die aktuelle Version vom Code. Habs mehrfach neu kompiliert usw.

Die Version von MSDN lässt sich bei mir in der Form nicht kompilieren. weil der Compiler die strsafe.h nicht findet. Aber dadurch funktionieren eh nur einige der string-Operationen nicht. Am eigentlichen Geschehen sollte sich nichts dadurch ändern, dass ich es weggelassen hab.

Hmm, also wenn es bei dir läuft fallen mir nur ein paar Möglichkeiten ein:
1. Vista. Vielleicht irgendwas mit der Rechtverwaltung. Wobei ich mir das eigentlich nicht vorstellen kann, da zb der Projektordner nicht irgendwie geschützt ist (wie zb der Programme Ordner)
2. MinGW. Könnte sein, das da (evtl. in Kombi mit Vista oder was weiß ich) vielleicht was nicht stimmt. Aber eigentlich sollten die Windows API Funktionen ja unabhäng davon funktionieren, oder nicht?

Inzwischen hab ich das Programm mit C# realisiert. Ist aufeinmal nurnoch 10 Zeilen lang oder so. (Ist ein kleines Automatisierungstool, das ein Programm nacheinander mit Dateien aus einem angegebenen Ordner als Parameter aufruft).
Trotzdem wurmt es mich immer noch, dass das C++ bei mir nicht funktioniert. Ist immer ein wenig blöde, wenn man innerhalb eines Projektes verschiedene Sprachen benutzt ;).

Gruß
Jan
 
Zurück