frage: wie kann ich einen Text direkt in eine .txt Datei speicerhn OHNE ihn vorher z.B in eine ListBox zu schreiben aus



  • hallo die frage steht ja schon oben..

    void suche(AnsiString pfad)
    {
    Form2->Caption=pfad;
    
    TSearchRec sr;
    pfad += "\\";
    if (FindFirst(pfad + "*", faAnyFile, sr) == 0)
      {
        do
        {
                    if ((sr.Name != ".")&&(sr.Name != ".."))
                    {
    
                          if (sr.Attr == faDirectory)
                          {
                                    suche(pfad+sr.Name);
                          }
                          else
                          {
                                  Form2->ListBox1->Items->Add(pfad+sr.Name);
                                  Form2->ListBox1->Items->SaveToFile("dateien.txt");
                                  Form2->StringGrid1->RowCount = Form2->StringGrid1->RowCount + 1;
                                  Form2->StringGrid1->Cells[0][Form2->StringGrid1->RowCount-1] = sr.Name;
                                  Form2->StringGrid1->Cells[1][Form2->StringGrid1->RowCount-1] = IntToStr(sr.Size);
    
                          }
                    }
    
        } while (FindNext(sr) == 0);
        FindClose(sr);
      }
    }
    
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    StringGrid1->RowCount = 1;
    StringGrid1->RowCount = 0;
    suche(Edit1->Text);
    }
    

    ein ausschnitt aus meinem c++ quelltext..ihr seht ich schreibe das ausgelesene erst in eine ListBox und dann wird es aus der ListBox in eine .txt Datei gespeichert..
    Das möchte ich aber umgehen..ich möchte das das Programm alle gefundenen Daten SOFORT in eine .txt Datei schreibt..

    könntet ihr mir helfen??
    DANKE



  • Hallo guten Morgen,
    du kannst auch mit fopen, fread und fwrite arbeiten dann kannst du Zeile für Zeile in eine Datei schreiben.

    evi48



  • ok dankeschön hast du vielleicht auch nen kleines Beispiel für fwrite..wie ich das am besten Anwende..??



  • Bitte auch mal die C++ - FAQ durchschauen



  • evi48 schrieb:

    Hallo guten Morgen,
    du kannst auch mit fopen, fread und fwrite arbeiten dann kannst du Zeile für Zeile in eine Datei schreiben.

    evi48

    Warum nicht die C++ Streams? Dazu gibts auch ein Beispiel in der C++ FAQ. 😉



  • PuppetMaster2k schrieb:

    evi48 schrieb:

    Hallo guten Morgen,
    du kannst auch mit fopen, fread und fwrite arbeiten dann kannst du Zeile für Zeile in eine Datei schreiben.

    evi48

    Warum nicht die C++ Streams? Dazu gibts auch ein Beispiel in der C++ FAQ. 😉

    eViLiSSiMo schrieb:

    Bitte auch mal die C++ - FAQ durchschauen

    L O L 😃



  • Und hier ein Beispiel aus der Hilfe des C++ Builder

    #include <stdio.h>
    
    struct mystruct
    {
      int i;
      char ch;
    };
    
    int main(void)
    {
       FILE *stream;
       struct mystruct s;
    
       if ((stream = fopen("TEST.$$$", "wb")) == NULL)  /* Öffnet Datei TEST.$$$ */
       {
          fprintf(stderr, "Cannot open output file.\n");
          return 1;
       }
       s.i = 0;
       s.ch = 'A';
       fwrite(&s, sizeof(s), 1, stream);  /* write struct s to file */
       fclose(stream);  /* close file */
       return 0;
    }
    

    Vergiss auf keinen Fall den fclose am Ende sonst sind deine gespeicherten Daten nicht mehr da.

    evi48



  • fstream f2("Datei.txt", ios::in); 
        if (!f2) 
        {   // ok. Datei existiert nicht. Neu erstellen 
            f.clear(); 
            f.open("Datei.txt", ios::out); 
            if (f.is_open()) 
            { 
                // mit Datei arbeiten 
            } 
        } 
        else 
        { 
            cout << "Datei existiert bereits!" << endl; 
        }
    

    ist etwas anders..weil ich habe eine schleife..und wenn ich das so machen würde würde es nur eine Date in der Datei speichern und dann zeigt es bei jedem durchlauf "Datei existiert bereits!" an und da schreibt es mit nur einen DS rein..
    müsste vor der Schleife die überprüfung machen..
    und dann an der stelle:

    Form2->ListBox1->Items->Add(pfad+sr.Name);
                                  Form2->ListBox1->Items->SaveToFile("dateien.txt");
    

    stehen..



  • Und das ist der Weg in C. In C++ geht das eher so:
    (Ungetestet)

    #include <fstream>
    void suche(AnsiString pfad , std::ofstream & ofs )
    {
    Form2->Caption=pfad;
    
    TSearchRec sr;
    pfad += "\\";
    if (FindFirst(pfad + "*", faAnyFile, sr) == 0)
      {
        do
        {
                    if ((sr.Name != ".")&&(sr.Name != ".."))
                    {
    
                          if (sr.Attr == faDirectory)
                          {
                                    suche(pfad+sr.Name,ofs);
                          }
                          else
                          {
                                  ofs << ( pfad + sr.Name ).c_str() << std::endl;
                                  Form2->StringGrid1->RowCount = Form2->StringGrid1->RowCount + 1;
                                  Form2->StringGrid1->Cells[0][Form2->StringGrid1->RowCount-1] = sr.Name;
                                  Form2->StringGrid1->Cells[1][Form2->StringGrid1->RowCount-1] = IntToStr(sr.Size);
    
                          }
                    }
    
        } while (FindNext(sr) == 0);
        FindClose(sr);
      }
    }
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
      std::ofstream ofs("Dateiname.txt");
      suche(Edit1->Text, ofs);
    }
    


  • Außerdem ist das alles Console..

    PERSON Pers;
            cout << "Vorname: ";
            cin >> Pers.VorName;
            cout << "Nachname: ";
            cin >> Pers.NachName;
            cout << "TelNr: ";
            cin >> Pers.TelNr;
    
            // Aktuelle Person in der Datei speichern.
            File.write((const char*)&Pers, sizeof(Pers))
    

    so etwas gibt es bei mir gar nicht..

    der soll nur

    pfad+sr.Name
    

    in die .txt datei schreiben



  • [C++ Error] Unit2.cpp(35): E2193 Too few parameters in call to 'suche(AnsiString,_STL::ofstream &)'

    ???



  • Hast du dir mal Button1Click angeschaut?



  • void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    StringGrid1->RowCount = 1;
    StringGrid1->RowCount = 0;
    std::ofstream ofs("dateien.txt");
    suche(Edit1->Text, ofs);
    }
    

    Der Fehler ist in dieser Zeile:

    if (sr.Attr == faDirectory)
                          {
                                    suche(pfad+sr.Name);
                          }
    


  • ok hab den fehler!!

    Vielen Dank für eure Hilfe ^^


Anmelden zum Antworten