Donnerstag, Mai 28, 2020

Findet alle Dateien im Verzeichnis mit „FindFirstFileA“ – C

Ich bin mit der Windows-API und möchte in der Lage sein zu suchen, die durch ein angegebenes Verzeichnis und kehren die Namen der Dateien, die sich innerhalb es.

Habe ich angefangen, bei ihm jedoch habe ich gegen eine Wand geprallt, wie ich bin mir nicht sicher, wie weiter zu gehen.

Hier ist mein Fortschritt bisher:

#include <stdio.h>
#include <windows.h>

void main()
{
 HANDLE fileHandle;
 WIN32_FIND_DATAA fileData;

 fileHandle = FindFirstFileA("*.txt", &fileData);

 if(fileHandle != INVALID_HANDLE_VALUE)
 {
  printf("%s \n", fileData.cFileName);
 }
}
  • Es ist ein vollständiges Beispiel bei msdn.microsoft.com/en-us/library/aa364418%28VS.85%29.aspx. Wenn Sie beabsichtigen, zu tun, Windows-Programmierung, die lernen, wie man MSDN ist eine notwendige Fähigkeit.
  • Ich habe schon den MSDN-Dokumentation-aber wie ich bin, etwas neues zu C ich hatte nicht das Gefühl, komfortabel mit Sie es von C++
  • Der code, den ich gepostet einen link auf C-code, wie alle die Beispiele, die veranschaulichen die Verwendung von der Win32-API – es-C-API.
  • Ich entschuldige mich, wenn ich sah, „Die folgende C++ – Beispiel zeigt eine minimale Verwendung von FindFirstFile.“ Ich nahm an, es würde nicht funktionieren.
  • Ja, das ist irreführend – einige intern bei MS wahrscheinlich wollte sich wichtig fühlen.
  • Dies versetzt mich mit MSDN manchmal so, obwohl ich es Häufig Fehler wie die, die Sie erwähnt, die es schwer machen zu unterscheiden, was zu tun ist.

2 Kommentare

  1. 2

    Müssen Sie rufen Sie FindNextFile in einer Schleife alle Dateien finden. Es ist ein komplettes Beispiel hier, hier sind die interessanten bits:

    hFind = FindFirstFile(szDir, &ffd);
    
    if (INVALID_HANDLE_VALUE == hFind) 
       return dwError;
    
    do
    {
       printf("%s\n"), ffd.cFileName);
    }
    while (FindNextFile(hFind, &ffd) != 0);
    • Ich habe mit das Beispiel auf der MSDN-Website, aber es scheint zu schließen, sobald es öffnet.
    • Versuchen Sie es von der Kommandozeile aus und sehen, was es sagt.
    • Ich schaffte es, ein text-snippet aus der Konsole: \Release\ – Übung 2.exe <directory-name> Drücken Sie eine beliebige Taste, um fortzufahren . . . Habe ich es unterlassen die Verzeichnisse führenden .exe
    • Es ist bezeichnend, wie Sie das Programm verwenden. Sie liefern müssen einen Verzeichnis-Namen als command-line-parameter. Oder stattdessen, können Sie übernehmen den code, den ich gepostet in Ihrem Programm – ändern Sie einfach den Namen der Variablen, die Sie verwendet, und Sie verwenden müssen, um FindNextFileA statt FindNextFile.
  2. 0
    #include <stdio.h>
    #include <windows.h>
    
    void main()
    {
        HANDLE fileHandle;
        WIN32_FIND_DATA ffd;
        LARGE_INTEGER szDir;
        WIN32_FIND_DATA fileData;
        fileHandle = FindFirstFile("C:\\Users\\rest_of_the_Address\\*", &ffd);
    
        if (INVALID_HANDLE_VALUE == fileHandle)
            printf("Invalid File Handle Value \n");
    
        do
        {
            printf("%s\n", ffd.cFileName);
        } while (FindNextFile(fileHandle, &ffd) != 0);
        system("pause");
    }

    Ihnen fehlten einige Erklärungen, und hatte einige syntax-Fehler behoben, bis hier, und auch, vergessen Sie die msdn Dokumentation (hier ist ein msdn-Beispiel für das Programm)

    • Auch der “ * “ am Ende ist für die Anzeige aller Dateien im angegebenen Verzeichnis

Kostenlose Online-Tests