dateien nach dateiendung filtern
-
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 ?
-
Du musst da nix markieren.
Ich hab jetzt nur in die MSDN geguckt, aber ich hab da ne Funktion, wo ich den Index angeben kann:MSDN schrieb:
CListBox::GetText
void GetText( int nIndex, CString& rString ) const;Parameters
nIndex
Specifies the zero-based index of the string to be retrieved.rString
A reference to a CString object.Remarks
Gets a string from a list box.Das ist ein gekürzter Auszug mit dem wichtigsten für dich.
-
ok sorry eigene doofheit- hatte da noch ein current selection vorne dran.
danke dir !
-
ich nochmal
also soweit funktioniert alles wunderbar
ich habe jetzt nur noch ein kleines problem.
ich lese die daten aus dem ordner aus:
c:dokumente_u_einstellungen\bla\bla\_BIN_
das gebe ich vorher durch einen Openfiledialog an.
der pfad wird in einem string gespeichert.ich möchte aber gleichezitig noch diesen pfad auslesen:
c:dokumente_u_einstellungen\bla\bla\_DATA_
also einfach einen ordner zurückspringen dann in den auch noch reingehen.
habe gehört das man das so machen kann : ordner..\anderer ordner . also mit(..\)
ich habe jetzt das problem das in dem gepseichertem string die pfadangabe so steht:
c:dokumente_u_einstellungen\bla\bla\_BIN_\ -- ich müsste doch den letzten schrägstrich dafuer wegmachen oder ? oder geht sowas generell nicht in MFC ?
wenn doch wie kann ich am gescheitesten das letzte zeichen entfernen.
hab schon viel probiert aber da alles was den pfad angeht variabel bleiben muss hab ich es irgendwie noch nicht rausgefunden._DATA_ und _BIN_ liegen aber im gleichen ordner.
wäre dankbar fuer hilfe !!!