Problem beim Speichern eines Strings in einer StringList



  • Ja so soll es ja auch sein. In config.txt soll der Pfad ganz oben stehen und wenn man in im Programm ändert überschrieben werden. Den pfad soll man mit OpenDialog1->Execute(); auswählen können also mit FileName. Oder ist das nicht so empfehlenswert? (Weil dann kommt ja der Fehler das config.txt nicht geöffnet werden kann)

    Da ich noch ein Anfänger bin ist mir nichts anderes eingefallen als die Benutzer den Pfad mit OpenDialog bzw SaveDialog auszuwählen.



  • Sorry, ich verstehs nicht:

    Wenn du nur den Pfad einer Datei speicherst, wie kann das

    , kommt der Fehler: "datei.txt kann nicht geöffnet werden".

    passieren??

    Du willst also in einer Datei Names config.txt eine beliebigen Pfad und Dateinamen speichern

    Dann würde ich das so machen:

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    if(OpenDialog1->Execute())
       {
       Edit1->Text = OpenDialog1->FileName;
       pfad2->Clear();
       pfad2->LoadFromFile("config.txt");
       pfad2->Strings[0] = OpenDialog1->FileName;
       pfad2->SaveToFile("config.txt");
       }
    }
    //---------------------------------------------------------------------------
    


  • _____________________   _______
    |EDIT1                | |Button2|
     ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯   ¯¯¯¯¯¯¯
     _________
    |Button1  |
     ¯¯¯¯¯¯¯¯¯
    

    damit du/ihr weißt/wisst wie es aussieht

    Ich habs jetzt mal zum Test genauso gemacht wie du gesagt hast aber es tritt der selbe Fehler auf.
    Dann habe ich es nochmal gemacht wie ich es unten hatte nur mit if((OpenDialog1->Execute()) anstatt ohne if.

    Selbe Fehler. Wenn ich den Pfad per Hand eingebe funktioniert es, wenn ich aber den Pfad mit OpenDialog->FileName bestimme, "kann datei.txt nicht geöffnet werden" bzw config.txt. Das darf doch nicht sein.



  • Hm, jein. Wenn Du mit einem Open- / SaveDialog arbeitest, wird das aktuelle Verzeichnis gewechselt. Gib mal den Pfad bei der Config.txt mit an.

    Zur Verzeichnisauswahl sollte auch SelectDirectory besser geeignet sein.



  • Oh das habe ich gar nicht gewusst. Dann ist es ja logisch 😉 ok ich mache mich mal mit SelectDirectory schlau. Danke erst mal



  • hm... wie finde ich denn heraus in welchem Ordner (pfad) das Programm liegt? Also die .exe Datei.



  • siehe BCB-Hilfe unter:
    ExtractFilePath / ExtractFileDir
    Application->ExeName



  • Ähhhhhhhhhhhhhhhhhhhhhhhhh

    wenn ich aber den Pfad mit OpenDialog->FileName bestimme

    Du willst den Pfad bestimmmen DEN PFAD?? Keine Datei?

    Das geht mit OpenDialog nicht

    http://www.marquardtnet.info/cecke/komponenten.2/2_selectdir.html



  • Nein ^^

    Also es soll schon eine Datei ausgewählt werden. Das soll dann in Edit1->Text angezeigt werden wie z.B. C:\ABC\DEF.exe
    Das mit dem OpenDialog würde dann ja theoretisch funktionieren, ich muss nur noch wissen wie das Programm eigenständig (ohne das der Benutzer was machen muss) in ein anderes Verzeichnis wechselt sodass config.txt wieder geöffnet werden kann. Also wäre zu dem Thema meine letzte Frage wie das Programm in das Verzeichnis wechselt in der die .exe Datei liegt (mein Programm das in dem Moment ausgeführt wird).

    MfG Xolker



  • entweder pfad2->LoadFromFile(Programmpfad + "config.txt")
    oder chdir(ProgrammPfad)



  • Ja aber wie lass ich das Programm den Programmpfad herauskriegen?



  • Ich gebe es jetzt auf

    Ja aber wie lass ich das Programm den Programmpfad herauskriegen?

    Lies den Thread



  • Wenn du die Komponente meinst die du gepostet hast: Damit muss der Anwender doch einen Pfad auswählen.
    Es gibt ja Application->ExeName; womit der Pfad+dem Dateinamen und Endung gegeben wird. Das würde mir auch reichen wenn ich wüsste wie man den Namen herausfindet (also name.exe).



  • Linnea schrieb:

    siehe BCB-Hilfe unter:
    ExtractFilePath / ExtractFileDir
    Application->ExeName

    Folge doch einfach Linneas Hinweis. Da steht genau das, was Du brauchst.

    Joe_M.



  • Hmm ok das ist mir zu hoch und nicht nur ein bisschen. Kann man nicht irgendwie den Dateinamen herausfinden?
    Bis dahin hab ich was anderes herausgefunden:

    Edit1->Text = Application->ExeName.SubString(1,Application->ExeName.Length()-12)+"config.txt";
    

    Dann darf man den Dateinamen halt nur nicht ändern bzw. die Länge.



  • Ich schließe mich Christian411 an...

    Sorry,

    Joe_M.



  • Naja wie ich in meinem letzten Beitrag gesagt hab ist es zu hoch für mich, ich verstehe das nicht mit anderen Worten ich habe es mir angeguckt es hilft mir nur nicht.



  • Hallo

    ums kurz zu machen

    Edit1->Text = ExtractFilePath(Application->ExeName) + "config.txt";
    

    Sowas solltest du aber aus den Beschreibungen der BCB-Hilfe rauslesen können.

    bis bald
    akari



  • Dann würde ich vermuten, dass Dir die grundlegenden C++-Kenntnisse fehlen. Ohne die kommst Du (auch) im BCB nicht weit. Arbeite ein paar Tutorials durch.

    Grüße Joe_M.



  • @akari: Vielen Dank. Mich hat das in der BCB Hilfe einfacg verwirrt.


Anmelden zum Antworten