Dateien und Ordner Listen
-
Hallo!
Ich möchte einem array datei und ordnernamen (inkl. pfad) hinzufügen.
wie kann ich nun in einer schleife durch angabe eines pfades (z.B. C:\Programme\Dateien) den inhalt inkl. pfad bekommen?
-
Siehe FAQ, unter "Dateien+Verzeichnisse".
-
danke.
bin also hier gelandet Dateien+Verzeichnisse - Dateinamen u. -attribute für Verz. + Unterverz. auflistenklappt auch super, blos ordner werden nicht gelistet?
-
Du musst die Abfrage bei if((sr.Attr& faDirectory)) so umstricken, dass eben auch bei Verzeichnissen ein neues Listitem erzeugt wird.
-
oh jetzt bin ich grad platt.
das problem ist ja das unterordner zwar durchsucht werden aber die files dann alles in einer reihe gelistet wird. ich müsste es drum so haben das gefundene sub dateien mit dem ordner dann gelistet werden. also so ist es jetzt:beispeil: C:\
datei1
datei2
datei3
datei4 //kommt von C:\sub
datei5 //kommt von C:\sub
datei6 //kommt von C:\sub
datei7
datei8
datei9ich müsste es dann hald so haben:
datei1
datei2
datei3
ORDNER[sub]->subdatei4
ORDNER[sub]->subdatei5
ORDNER[sub]->datei6
datei7
datei8
datei9weiste wie ichs meine?
-
Original erstellt von Jansen:
Du musst die Abfrage bei if((sr.Attr& faDirectory)) so umstricken, dass eben auch bei Verzeichnissen ein neues Listitem erzeugt wird.hm und wie mach ich das?
-
Ich bezweifle ernsthaft, dass du dich in den drei Minuten ernsthaft mit dem Problem auseinandergesetzt hast, deshalb räume ich dir erstmal etwas "Bedenkzeit" ein.
Versuch erstmal, den Code, so wie er dasteht, zu verstehen, dann solltest du eigentlich auch selbst auf eine Lösung kommen.
-
ich versteh es nicht
jetzt hab ich noch ein weiteres problem. die grösse muss auch noch mit für jedes file.
-
back again
ok das mit der grösse habe ich nun hinbekommen. doch das mit dem verzeichniss will einfach nicht. so schaut es aus:
if((sr.Attr& faDirectory)) { if (sr.Name[1]!='.') { //Directory=StartDirectory+(AnsiString)sr.Name+"\\"; //GetFileList(Liste,Directory); pFiledata Item=new tFiledata; Item->SIZE=sr.Size; Item->Name=sr.Name+"\\"; Item->Path= StartDirectory; Item->Data=sr; Liste->Add(Item); } } else { pFiledata Item=new tFiledata; Item->SIZE=sr.Size; Item->Name=sr.Name; Item->Path= StartDirectory; Item->Data=sr; Liste->Add(Item); } result=FindNext(sr); }
was mache ich den falsch?
-
Nimm beim Originalcode das else raus und ändere die eine Zeile:
Item->Name= StartDirectory + sr.Name;
-
hmm habe genau das gemacht was du gesagt hast, klappte aber nicht. nun habe ich den code wie folgt... führt aber zu dem ergebniss das der ftp client meint das sei eine datei ohne endung. also das was ein ordner sein sollte...
was nun?
while(result==0) { Application->ProcessMessages(); pFiledata Item=new tFiledata; Item->Name=sr.Name; Item->Path= StartDirectory; Item->Data=sr; Liste->Add(Item); result=FindNext(sr); }
-
Mach dir 'nen Kopf. Der Vorschlag in meinem letzten Beitrag ist getestet und funktioniert.
-
das folgende ist der code wie er nach deinem letzten posting sein soll.
void __fastcall GetFileList(TList*Liste,String StartDirectory) { TSearchRec sr; String Directory; int result=FindFirst((StartDirectory+"*.*").c_str(), faReadOnly|faHidden|faDirectory, sr ); while(result==0) { Application->ProcessMessages(); if((sr.Attr& faDirectory)) { if (sr.Name[1]!='.') { Directory=StartDirectory+(AnsiString)sr.Name+"\\"; GetFileList(Liste,Directory); } } pFiledata Item=new tFiledata; Item->Name= StartDirectory + sr.Name; Item->Path= StartDirectory; Item->Data=sr; Liste->Add(Item); result=FindNext(sr); } }
und?
-
Und was? Ich bin doch kein Hellseher!
-
Ich denke <Daniel> sollte sich mal etwas auf das Debuggen konzentrieren.
-junix
[ Dieser Beitrag wurde am 24.04.2003 um 13:44 Uhr von junix editiert. ]
-
Jansen Sie haben Post!
-
Ich führe Forums-Diskussionen nicht privat weiter, es sei denn, ich hätte ausdrücklich darum gebeten.
-
es ging mir ja nur um die pic's...