Wie kann man nach einer Datei (unter Windows) suchen?

26.03.2008

CPP - Code:
#include <windows.h>
#include <shellapi.h>
 
#include <string>
#include <iostream>
 
using namespace std;
 
/*
 * returns the path to the file, when a first match was found
 * returns an empty sring, when no matching filename was found
 */

string searchFile(string File, string inPath) {
    WIN32_FIND_DATA FData;
    HANDLE hSearch = FindFirstFile((inPath + "\\*").c_str(), &FData);
 
    // return the empty path when we did not find anything
    if (hSearch == INVALID_HANDLE_VALUE)
        return "";
 
    do {
        // found the file / directory
        if (FData.cFileName == File) {
            return inPath;
        }
 
        if (FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) {
            //skip current and parent directory
            if (string(FData.cFileName) != "." && string(FData.cFileName) != "..") {
                //recursive search
                string foundFile = searchFile(
                                    File,
                                    inPath + "\\" + FData.cFileName);
 
                if (foundFile != "") {
                    return foundFile;
                }
            }
        }
    } while (FindNextFile(hSearch, &FData) != 0);
 
    // not found
    return "";
}


Die Funktion searchFile sucht nach File im Ordner inPath und den Unterordnern von inPath.

Dazu wird zunächst mit FindFirstFile die erste Datei im Ordner gesucht und dann in der Schleife mit FindNextFile die jeweils nächste Datei geholt, bis keine weiteren Dateien vorhanden sind.

Das folgende Beispielprogramm demonstriert dies nochmals:
Im Ordner "C:\Dokumente und Einstellungen\Administrator" wird die Datei "Projekt1.exe" gesucht.
CPP - Code:
int main()
{
    cout << "Search..." << endl;
 
    string found = searchFile(
                    "Projekt1.exe",
                    "C:\\Dokumente und Einstellungen\\Administrator");
 
    //found?
    if (found == "") {
        cout << "File not found Traurig" << endl;
    } else {
        cout << found << endl;
    }
 
    cout << endl;
    system("PAUSE");
}


Noch anzumerken wäre, dass Groß- und Kleinschreibung zu beachten ist. Würde die zu suchende Datei im obigen Beispiel projekt1.exe heißen, so würde die Suche keinen Treffer liefern, da beim Vergleich "Projekt1.exe" == "projekt1.exe" false zurückgegeben wird.

Tobias Zimmerlin

26.03.2008
Author: Tobias Zimmerlin

Hallo find die Hilfe super !!
ich such hier gerne nach hilfe und find meistens nichts ;( aber das habe
ich auch gesucht) und gefunden ^^danke
N43

Einen neuen Kommentar erstellen...