dateien nach dateiendung filtern
-
An welcher Stelle in deiner oberen Schleife hast du denn die Abfrage eingebaut, ob du eine ".rbt" Datei hast?
-
CString Recurse(LPCTSTR pstr) { CFileFind finder; // build a string with wildcards CString strWildcard(pstr); strWildcard += _T("\\*.rbt"); // start working for files BOOL bWorking = finder.FindFile(strWildcard); while (bWorking) { bWorking = finder.FindNextFile(); // skip . and .. files; otherwise, we'd // recur infinitely! if (finder.IsDots()) continue; // if it's a directory, recursively search it if (!finder.IsDirectory()) { CString str_1; str_1 = finder.GetFileName(); return str_1; } } }
habe aus dem . einfach *.rbt gemacht
-
strWildcard += _T("\\*.rbt");
wenn das dien Filter ist, dann findest du weder '.', noch '..', noch andere
Verzeichnisse.Ich hab mal folgendes probiert:
void Recurse(LPCTSTR pstr) { CFileFind finder; // build a string with wildcards CString strWildcard(pstr),strFilter; strWildcard += _T("\\*.*"); strFilter = _T(".txt"); // start working for files BOOL bWorking = finder.FindFile(strWildcard); cout << (LPCTSTR) pstr << endl; while (bWorking) { bWorking = finder.FindNextFile(); // skip . and .. files; otherwise, we'd // recur infinitely! if (finder.IsDots()) continue; // if it's a directory, recursively search it if (finder.IsDirectory()) { CString str = finder.GetFilePath(); Recurse(str); } else { CString str = finder.GetFilePath(); if (str.Find(strFilter) > 0) cout << (LPCTSTR) str << endl; } } cout << _T("..") << endl; finder.Close(); }
TinTin
-
Es sei noch angemerkt:
- ".abc" ist per default gleichbedeutent mit ".abc*"
- wenn Du was rekursiv machst, dann beachte bitte auch noch "FILE_ATTRIBUTE_REPARSE_POINT" prüfen, da Du sonst in eine Endlosschleife laufen kannst... (mittels MatchesMask)
-
also eigentlich ist es von mir auch beabsichtigt so das NUR *.rbt dateien in nur eben diesem einen ordner den ich an die funktion übergebe angezeigt werden.
ich habe unter VBA schonma was von einer FilelistBox gehört bei der man einen Pfad angeben kann und dann irgendwie über filter halt auch auf der oberfläche nur die rbt dateien anzeigen lassen könnte. wäre das auch noch eine möglichkeit ? oder gibt es das bei mfc nicht ?
danke
-
Du kannst im MFC eine eine CListBox mit .Dir() füllen. AFAIK kann man da auch
per Wildcard einen Filter angeben.TinTin
-
also ich bin immernoch bei meiner listbox. allerdings will das nicht so ganz hinhauen. habe eine listbox erstellt. und auch über den klassenassistent einmal wert und control zugeweisen.
aber irgendwie klappt das nicht so ganz. habe den code einfach unten angefügt. könnt ihr mal gucken was damit los ist ?
CListBox m_ctl_fpga; m_ctl_fpga.SubclassDlgItem(IDC_fpga,this); m_ctl_fpga.Dir(0x0000,_T((LPCTSTR)"C:\\Dokumente und Einstellungen\\denrei\\Desktop\\bin-dateien\\*.rbt"));
habe es in initial dialog drin
Fehlermeldung ist:
Es kommt immer das fenter mit "DEbug libary" also das gar nichts mehr geht. mit dem wiedreholen und ignorieren button.
kann ich das mit dem code nicht einfach so machen ?
-
Der Code da oben ist vom Assistenten?
Irgendwie glaube ich dir das nicht...Steht diese Zeile auch in der OnInitDialog? Oder im Header?
CListBox m_ctl_fpga;
-
nene der code ist der den in in initdlg eingefügt habe. also die 3 zeilen stehen da. aber irgendwie kommt immer diese fehlermeldung.
ich weiss auch nicht wieso. sieht das denn auf den ersten blick erstmal richtig aus ?
danke
-
Mach die ersten beiden Zeilen mal weg.
Dann lege mit dem Assistenten eine Controlvariable an und versuchs nochmal.
-
oh man alles klar danke dir . habe grade nur die ersten beiden zeilen gelöscht und schon funtkioniert es. man ey so was und ich sitz da so lange dran.
Danke dir !!
-
kurze und letzte frage hätte ich da noch.
ich habe ja den pfad jetzt entgültig angegeben. der ist bei mir aber variable und wird in einen cstring gespeichert.
wenn ich den pfad durch den string ersetze geht es irgendwie nicht und die listboc bleibt leer.
woran kann das liegen ?danke
-
Zeig den Abschnitt mal.
-
m_ctl_fpga.Dir(0x0000,_T((LPCTSTR)"C:\\Dokumente und Einstellungen\\Heidenreich.KRAUSE_DE\\Desktop\\bin-dateien\\*.rbt"));
ich habe es jetzt so versucht:
m_ctl_fpga.Dir(0x0000,cFileDir);
m_ctl_fpga.Dir(0x0000,_T((LPCTSTR)cFileDir));
oder muss ich es anders mache ?
danke !!
-
ok habe grad gesehen das ich die *.rbt am ende vergessen habe. aber er sollte doch trotzdem dann alles anzeigen was sich in dem ordner befindet oder?
EDIT; hat sich erledigt. habe jetzt die dateiendung drangehangen. jetzt geht es wieder. besten dank !!!
-
Na ist doch schön.
Fehler alleine finden ist doch viel besser als alles gezeigt kriegen, oder?
-
BTW:
.Dir()
kannst nicht benutzen um die Box rekursiv zu füllen. AfAIK musst
du dir da was eigenes bauer.TinTin
-
wie meinste das jetzt ? also füllen geht doch . zumindest stehen da die dateinamen. ich bin jetzt nur dabei das ganze wieder auszulesen und das in einen string zu speichern. bin noch auf der suche nach dem passenden stück code.
-
Da du keine Rekursion nutzen willst, ist das was Tintin gesagt hat nicht so wichtig für dich.
Rekursion == auch untergeordnete Ordner durchguckenWegen dem Auslesen schau dir mal CListBox::GetText an.
-
sorry ich nochmal. komme irgendwie nicht weiter. habe das jetzt mit gettext versucht. wenn ich die daten aus dem listenfeld speichern will muss ich diese aber vorher makieren und kann immer nur das makierte speicher.
geht es nicht auch das alles automatisch makiert ist ? also das ich einfach auf den speicher button klicke und automatisch alle im listenfeld befindlichen daten gespeichert werden ?