tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
817
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    JRKleemann JRKleemann ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    17
    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/lib...00(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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
    #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
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Was hast du denn als Argument an das Programm übergeben?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    JRKleemann JRKleemann ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    17
    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
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    JRKleemann JRKleemann ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    17
    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
     

Ähnliche Themen

  1. HTTP-Scan findet nichts
    Von Kai008 im Forum Java
    Antworten: 4
    Letzter Beitrag: 13.10.08, 08:14
  2. GetElemetsByID findet nichts?
    Von hab1cht im Forum Javascript & Ajax
    Antworten: 11
    Letzter Beitrag: 25.12.07, 11:23
  3. preg_replace -- findet aber nichts !
    Von Dimenson im Forum PHP
    Antworten: 12
    Letzter Beitrag: 13.06.06, 23:07
  4. FindNextFile
    Von colt4ever im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 17.02.05, 14:23