Aus ListBox in Datei



  • Hi,

    mit diesem Code:

    int iFileHandle;
    char szFileName[MAXFILE+4];
    char file;
     SaveDialog1->DefaultExt = "TXT";
    SaveDialog1->FileName = "*.txt";
    if (SaveDialog1->Execute())
      {
      if (FileExists(SaveDialog1->FileName))
        {
          fnsplit(SaveDialog1->FileName.c_str(), 0, 0, szFileName, 0);
          strcat(szFileName, ".BAK");
          RenameFile(SaveDialog1->FileName, szFileName);
        }
    
      try
    {
    
    Edit1->Text = ExtractFileExt((SaveDialog1->FileName));
    iFileHandle = FileCreate(SaveDialog1->FileName);
    ListBox2->Items->SaveToFile(????);
    

    wollte ich eigentlich durch den Save Dialog angegebene Datei, Einträge hinzufügen und speichern lassen. Nämlich aus ListBox2. Allerdings weis ich nicht, wie ich das machen müsste. SaveToFile(????)
    Oder bin ich auf dem falschen Weg???

    cookie_woman



  • if (SaveDialog1->Execute())
    FileList1->Items->SaveToFile(SaveDialog1->FileName);

    Und *.txt ist kein FileName sondern Filter, kannst du schon festlegen im BCB.



  • Original erstellt von Spieleprogrammierer:
    **if (SaveDialog1->Execute())
    FileList1->Items->SaveToFile(SaveDialog1->FileName);

    Und .txt ist kein FileName sondern Filter, kannst du schon festlegen im BCB.*

    Hi,

    *.txt soll genau erst einmal angezeigt werden. Und SaveToFile(SaveDialog1->FileName); bringt mir eine Fehlermeldung. Das hatte ich auch schon gedacht.
    Error: Datei kann nicht erstellt werden.
    Achso: es keine FileList1 sonder ListBox1.
    cookie_woman

    [ Dieser Beitrag wurde am 23.06.2003 um 15:48 Uhr von cookie_woman editiert. ]



  • Was ist denn der Filename den du angegeben hast? (Was sagt der Debugger was der Inhalt von SaveDialog1->Filename sei?)

    -junix



  • Das liegt nicht am Quelltext, deine Fehlermeldung, es liegt an Windows. Vielleicht darfst du auf einen bestimmten Bereich nicht zugreifen? Oder du solltest im SaveDialog einstellen, da gibts sone option, die heißt FileMustExists und die musst du auf true setzen. Und *.txt soll dastehen, nagut, dann war's richtig, aber ansonsten wozu so kompliziert, wenns auch einfach geht?

    Oder anders: Wozu 19 Zeilen, wenn das ganze in 5-7 Zeilen reinpasst?

    [ Dieser Beitrag wurde am 23.06.2003 um 15:50 Uhr von Spieleprogrammierer editiert. ]



  • Original erstellt von junix:
    Was ist denn der Filename den du angegeben hast? (Was sagt der Debugger was der Inhalt von SaveDialog1->Filename sei?)
    -junix

    Hi,

    der Debugger meint, das FileName kein Existierendes Symbol ist.

    cookie_woman



  • Hmmm und was ist die Ausgabe, wenn du SaveDialog1->FileName per ShowMessage() ausgeben lässt?

    -junix



  • Original erstellt von junix:
    Hmmm und was ist die Ausgabe, wenn du SaveDialog1->FileName per ShowMessage() ausgeben lässt?
    -junix

    Danke erst einmal für die schnelle Hilfe.

    Ich bekomme eine Zahl zurück(-1).

    [ Dieser Beitrag wurde am 23.06.2003 um 16:17 Uhr von cookie_woman editiert. ]



  • ShowMessage(SaveDialog1->FileName); Gibt dir also ne Messagebox mit dem Inhalt "-1"? Was gibst du denn als Dateinamen an, wenn der SaveDialog erscheint?

    -junix



  • Original erstellt von junix:
    **ShowMessage(SaveDialog1->FileName); Gibt dir also ne Messagebox mit dem Inhalt "-1"? Was gibst du denn als Dateinamen an, wenn der SaveDialog erscheint?

    -junix**

    Oh, Sorry. Ich hatte ShowMessage(iFileHandle); genommen.
    Ansonnsten wird mir mit deiner Message der Pfad zurückgegeben. Aber, dass hatte ich schon überprüft. Das stimmte. Die Datei wird erstellt. Aber eben nicht der Inhalt von ListBox2 hineingeschrieben. 😡

    cookie_woman



  • Nochmal zur eigentlichen Frage: du willst den Inhalt einer ListBox an eine bestehende Datei anhängen!?

    TStringList *list = new TStringList();
      if (SaveDialog1->Execute())
      {
        list->LoadFromFile(SaveDialog1->FileName);
        list->AddStrings(ListBox1->Items);
        list->SaveToFile(ChangeFileExt(SaveDialog1->FileName, ".bak"));
      }
      delete list;
    

    Oh Wunder der VCL! 😉



  • Original erstellt von Jansen:
    **[...]

    TStringList *list = new TStringList();
      if (SaveDialog1->Execute())
      {
        list->LoadFromFile(SaveDialog1->FileName);
       [...]
      }
      delete list;
    

    Oh Wunder der VCL! ;)**

    Hi, naja, irgendwie dann doch nicht. der kann nicht die Datei öffnen.
    Diese existiert aber.

    cookie_woman



  • Original erstellt von cookie_woman:
    Hi, naja, irgendwie dann doch nicht. der kann nicht die Datei öffnen.
    Diese existiert aber.
    cookie_woman

    So, jetzt habe ich es. Die Lösung war, die Datei muss wieder geschlossen werden.

    FileClose(iFileHandle);
    

    Danke an alle, die mir geholfen haben.

    cookie_woman


Anmelden zum Antworten