Datei Einlesen in ein Memofeld
-
AnsiString SearchDir = "c:\\verzeichnisname\\"; // \\ am Ende ist wichtig! AnsiString SearchFiles = "*.dat"; TSearchRec sr; int iAttributes = 0; AnsiString DatDatei; if (FindFirst(SearchDir + SearchFiles, iAttributes, sr) == 0) { // do // { int curAttrib = FileGetAttr(SearchDir + sr.Name); if (curAttrib & faDirectory) continue; // Unterverzeichnisse ignorieren, auch wenn sie mit .dat enden DatDatei = sr.Name; // enthält die erste gefundene Datei mit der Endung .dat // } while (FindNext(sr) == 0); } FindClose(sr);Die auskommentieren Zeilen zeigen, wie das Ganze in einer Schleife funktionieren würde, die alle .dat-Dateien durchiteriert.
Natürlich kann man dann keinen AnsiString (DatDatei) mehr verwenden, sondern muss z.B. eine TStringList verwenden, um die Dateinamen zwischenzuspeichern.
-
ok, und wie kann ich pfad per Edit eingeben, meins oben hat ja nich funktioniert!
Wie kann ich anzahl der Files in dem ordner ermitteln, damit ich dann serachnext machen kann??
-
hm, soll ich gleich die ganze Hausaufgabe für Dich machen?

Ich finde ein bißchen eigenen Hirnschmalz kannst Du auch investieren. Eine Zählvariable solltest Du schon selbst hinbekommen. Und wie man einem AnsiString den Text eines Edits zuweist auch. Um sicher zu stellen, dass am Ende ein \\ enthalten ist: IncludeTrailingBackslash(...)
-
Och Joe!
ICh schaffs net:
void __fastcall TForm1::Button1Click(TObject *Sender) { TSearchRec sr; AnsiString Path = IncludeTrailingBackslash(Edit1->Text); FindFirst(Path,faAnyFile,sr); Memo1->Lines->Add(sr.Name); FindNext(sr); Memo1->Lines->Add(sr.Name); }geht net, und wie ich anzahl an *.txt Dateien in dem Ordner finden kann weiß ich auch net!!!!! Hilf mir bitte!
-
Was tippst Du denn im Editfeld ein?
Schau Dir bitte nochmal mein Beispiel in Ruhe an.
Grüße Joe_M.
-
ich tippe c:\, c:\, c:\., c:\*.*!
Nix geht!
-
Wie wärs damit?
void __fastcall TForm1::Button3Click(TObject *Sender) { AnsiString SearchDir = Edit1->Text; // \\ am Ende ist wichtig! AnsiString SearchFiles = Edit2->Text; TSearchRec sr; int iAttributes = 0; AnsiString DatDatei; Memo1->Clear(); if (FindFirst(SearchDir + SearchFiles, iAttributes, sr) == 0) { do { int curAttrib = FileGetAttr(SearchDir + sr.Name); if (curAttrib & faDirectory) continue; // Unterverzeichnisse ignorieren, auch wenn sie mit .dat enden DatDatei = sr.Name; // enthält die erste gefundene Datei mit der Endung .dat Memo1->Lines->Add(sr.Name); } while (FindNext(sr) == 0); } FindClose(sr); }
-
Gast2 schrieb:
ich tippe c:\, c:\, c:\., c:\*.*
nur das erste dürfte gehen, 3. und 4. sind keine Pfadangaben, 2. wird dann zu C:\\\
es müßte sogar C: reichen
und schau dir das Beispiel von Joe NOCHMAL genau an, speziell die Zeile mit FindFirst
-
Ah danke @5erial und Joe, es geht doch...sorry!
Nur die Sache mit dem erkennen, wieviele Dateien meiner Auswahl in dem Ordner sind weiß ich noch nicht, wie geht das?
-
hallo?

-
Hallo
steht in
Memo1->Lines->Countbis bald
akari
-
nein ich möchte das vorher wissen, wieviel dateien in einem ordner sind, bevor ich es ins memo lesen!
-
Hallo
Dann mußt du die Dateinamen erstmal zwischenspeichern :
void __fastcall TForm1::Button3Click(TObject *Sender) { AnsiString SearchDir = Edit1->Text; // \\ am Ende ist wichtig! AnsiString SearchFiles = Edit2->Text; TSearchRec sr; int iAttributes = 0; AnsiString DatDatei; TStringList *Buffer = new TStringList(); // Zwischenspeicher für Dateinamen Memo1->Clear(); if (FindFirst(SearchDir + SearchFiles, iAttributes, sr) == 0) { do { int curAttrib = FileGetAttr(SearchDir + sr.Name); if (curAttrib & faDirectory) continue; // Unterverzeichnisse ignorieren, auch wenn sie mit .dat enden DatDatei = sr.Name; // enthält die erste gefundene Datei mit der Endung .dat Buffer->Add(sr.Name); } while (FindNext(sr) == 0); } FindClose(sr); // Jetzt kannst du aus Buffer->Count die Anzahl an Dateien lesen Memo1->Lines->Assign(Buffer); // Schreibt die Namen in das Memo delete Buffer; }bis bald
akari
-
ah danke, werd das morgen gleich mal austesten!