Datei Einlesen in ein Memofeld



  • Nein, TSearchRec sollte schon genügen...



  • Also ich komm damit nich zurecht:

    er findet nix...

    TSearchRec sr;
    AnsiString Path = Edit1->Text;
    FindFirst(Path,faAnyFile,sr);
    Label1->Caption=sr.Name;
    


  • 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->Count
    

    bis 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!


Anmelden zum Antworten