Dateinamen und Pfade + Unterordner auslesen
-
Hi Leute.
Ich muss aus der Registrierung einen Pfad auslesen. Das klappt auch ganz super.
In dem Pfad sind allerdings viele Dateien, die ich dann brauche für mein Programm.Wenn ich den pfad habe( !KANN auch ein netzwerkpfad sein)
wie kann ich dann auslesen was für ordner vorhanden sind und welche dateien drin sind?da hänge ich gerade und ohne dem komme ich leider nicht weiter
-
Hallo
siehe die Funktionen FindFirst() und FindNext() in der BCB-Hilfe und hier im Forum.
bis bald
akari
-
leider komme cih darauf nicht klar.
habe mir das beispiel angeschaut und auch probeirt - aber bei dem programm tut sich ja gar nixhast mal mehr infos?
-
Vielleicht hilft dir das
http://www.marquardtnet.info/cecke/dlls.3/3_chfilesearch.html
Ansosnten ist:
leider komme cih darauf nicht klar. aber bei dem programm tut sich ja gar nix
- keine Fehlerbeschreibung
Was soll man jetzt antworten?
-
na das bedeutet das bei dem beispielprogramm sich eifnach nix getan hat.
ich habe nix gesehen was passiert sit
-
Tja, dann wird dir wohl keiner helfen können. Keiner hat Zugriff auf deinen PC. Das Beispiel funktioniert definitiv. Code postest du nicht, beschreiben kannst du auch nicht, es bleibt dabei
Was soll man jetzt antworten?
-
Hallo
Bei dem Beispiel aus der BCB-Hilfe must du natürlich erstmal eine der Optionen einschalten. Wähl doch mal die CheckBox7 für die Option anyfile aus, und gib in Edit1 ein Sternchen ein. Dann bekommst du alle Dateien und Ordner aus dem Projektverzeichnis.
bis bald
akari
-
ich habe den code aus der hilfe 1:1 kopiert und in eine buttonfunktion gepackt:
TSearchRec sr; int iAttributes = 0; StringGrid1->RowCount = 1; iAttributes |= faReadOnly * CheckBox1->Checked; iAttributes |= faHidden * CheckBox2->Checked; iAttributes |= faSysFile * CheckBox3->Checked; iAttributes |= faVolumeID * CheckBox4->Checked; iAttributes |= faDirectory * CheckBox5->Checked; iAttributes |= faArchive * CheckBox6->Checked; iAttributes |= faAnyFile * CheckBox7->Checked; StringGrid1->RowCount = 0; if (FindFirst(Edit1->Text, iAttributes, sr) == 0) { do { if ((sr.Attr & iAttributes) == sr.Attr) { StringGrid1->RowCount = StringGrid1->RowCount + 1; StringGrid1->Cells[1][StringGrid1->RowCount-1] = sr.Name; StringGrid1->Cells[2][StringGrid1->RowCount-1] = IntToStr(sr.Size); } } while (FindNext(sr) == 0); FindClose(sr); } }
wenn ich den button drücke - rührt sich bei mir nix.
ist das sinn der sache?
-
akari - danke. jetzt sehe ich wenigstens was.
jetzt muss ich mal schauen, ob ich damit was anfangen kann....christian211: wenn ich dein beispiel laufen lasse(mit der dll
) hängt mein rechner. das ist nicht normal oder?
-
Nächste Übung:
Einen Breakpoint auf
if (FindFirst(Edit1->Text, iAttributes, sr) == 0)
setzen und mit F8 dann zeilenweise abarbeiten und beobachten was passiert. Mal mit der Maus über eine Variable zeigen. Mal das Fenster locale Variablen öffnen
-
solangsam verstehe ich das auch - mit dem beispiel und dem debuggen (*ggg*)
aber eine frage jetzt noch.
nehmen wir an - in dem verzeichniss, liegen erstmal nur unterverzeichnisse.
und darin sind die files die ich brauche.
dann habe ich ja, (dank akari weiß ich , das ich was anklicken muss) wenn ich auch nur filesearch mache oder so, die ordnernamen in der tabelleaber in genau denen muss ich weiter suchen.
hat jmd vllt mal einen lösungsansatz oder einen tipp?
-
Hallo
du sagst es doch schon.. du must aus dem Ursprungspfad und dem gefundenen Namen des Unterverzeichnis einen neuen Pfad zusammensetzen und dort eine neue Suche nach Dateien ausführen.
bis bald
akari
-
Die Datei-Attribute abfragen, ob du ein Verzeichnis erwischt hast und anschließend rekursiv weitersuchen.
-
wie greife ich denn auf die einträge zu?
also keine ahnung, zum beispiel wenn ich afu einen eitnrag doppelt klcike das er dann den pfad nimmt
-
Hast du doch schon gemacht sr.Name -> Pfad extrahieren, neu zusammensetzen. Das nennt man programmieren
-
dann bin ich ab jketzt ein programmierSIE(-dummkopp)