CFileFind: nach mehreren Dateiendungen suchen



  • Also, ich weis das ich nach FindNext()
    die Dateiendung der gefundenen Datei bekommen kann,
    bzw. sie bei FindFile() festlegen kann.
    Meine Frage ist, kann ich FindFile neben "." oder ".<Dateiendung>",
    auch mehrere Dateiendungen mitgeben: "
    .doc,.xls,.txt" (welches Format in diesem Fall 😕 )?
    Oder müsste ich das dann jeweils nach FindNext() abchecken ?

    Devil



  • Servus,

    ich hatte das mal in einem anderen Forum gefragt. Dort bekam ich die Antwort das das nicht gehen würde. Tja der Antwort musste ich dann nach ergebnisloser Suche glauben schenken.

    Habs so gemacht:

    CFileFind ffIniFile;
    	CStringArray strArrExt;
    
    	strArrExt.Add("*.txt");
    	strArrExt.Add("*.cpp");
    	strArrExt.Add("*.h");
    
    	for (int i = 0; i <= strArrExt.GetCount()-1; i++)
    	{
    		BOOL bFileFound = ffIniFile.FindFile(strArrExt[i]);
    
    		while (bFileFound)
    		{
    			bFileFound = ffIniFile.FindNextFile();
    			m_ctrList.AddString(ffIniFile.GetFileName());
    		}
    	}
    

    Die strArrExt.Add() hab ich einfach jetzt mal eingefügt.
    Wenns doch noch eine Multisuche geben sollte, dann wäre ich auch glücklich diese in Erfahrung zu bringen.

    *winke*
    Hellsgore



  • So hat es für mich den Nachteil, das es nicht sehr Performant ist,
    da du jeweils die Verzeichnisse x-mal durchsuchst.
    Ich hab mir überlegt, mit . zu suchen, und dann auf die
    Dateiendungen zu prüfen, die ich haben will.
    Stellt sich nur die Frage, welcher Weg der bessere ist...

    Devil



  • Servus,

    es kommt drauf an, auf wieviele Dateien du triffst. Sind es nur eine Handvoll ist es ja gerade "Jacke wie Hose"... würde ich mal so behaupten.....

    *winke*
    Hellsgore

    EDIT:
    Ja jetzt mal ne blöde Frage... Wie macht es eigentlich die "Suche" von Windoof? Dort kann man ja einen Suchfix eingeben mit mehreren Endungen...

    Aber es ist doch im Prinzip egal ob du bei FindFile mehrere angibst oder jede gefundene Datei manuell vergleichst. FindFile macht es ja auch nicht anders als jede Datei mit der erforderlichen Endung zu vergleichen... oder?



  • Eben, wenn ich 3 mal CFileFind benutze, um 3 datei endungen zu finden,
    hab ich bei CFileFind den 3 Fachen Aufwand, dafür muss ich aber nicht
    meinen vector durchsuchen, und auch nicht vorher die extension rausschneiden.
    Ergibt also:
    Aufwand = anzahl der Dateien gesamt * anzahl der Dateitypen
    oder
    Aufwand = anzahl der Dateien gesamt * Aufwand für ext * suche in vector

    Hm, mal testen 😃

    Devil



  • Teste mal und guck mal was schneller ist... 😃

    Hellsgore



  • Ein Scan, Dateiüberprüfung: 0.937
    Viele Scans, ein Dateityp: 0.016

    Als Testverzeichnis habe ich mein C++ Verzeichnis ausgelesen,
    rekursiv, also auch alle Unterordner mit Projekten etc.
    Das sind locker 1000 Dateien. Gesucht hatte ich nach .c,.h,.cpp.

    Frage beantwortet 😃
    Es liegt wohl daran, das CFileFind offensichtlich
    viel zeit braucht, die Dateiinformationen zu bekommen,
    dies aber nur bei dem gesuchten Dateitypen tut.

    Devil


Anmelden zum Antworten