Absolut? Relativ? -Pfad-Murks mit SaveToFile und LoadFromFile



  • Ich habe folgendes, ziemlich nerviges Problem:

    StringList->SaveToFile("xyz.txt");
    speichert den Inhalt von StringList in die Datei xyz.txt in das Verzeichnis, in dem das Programm ist.

    Wenn ich vorher aber zum Beispiel
    StringList2->LoadFromFile("C:\DIR\abc.txt");
    schreibe, speichert
    StringList->SaveToFile("xyz.txt");
    die Datei xyz.txt in den Ordner "C:\DIR".

    Das regt mich auuuuuuf!



  • die xyz.txt soll dann also in dem Programmpfad gespeichert werden? dann nimm doch einfach ExtractPath(Application->ExeName) oder so ähnlich...



  • hallo,

    also Gnunha das braucht dich überhaupt nicht zu nerven, denn das verhalten ist betriebsystemstandard und schon seit dos-zeit so.
    denn:
    StringList->SaveToFile("xyz.txt");
    speichert die datei in das aktuelle gültige verzeichnis. wenn also ein anwender des programms vor ausführen dieses befehls den explorer öffnet und in das verzeichnis c:\tmp schaut, so wird deine datei im verzeichnis c:\tmp\xyz.txt gespeichert, und wenn du das anders willst dann musst schon du selber dafür sorgen, denn win kann doch nicht deine gedanken lesen. also du kannst dich in diesem fall nur über deine eigene unprofessionalität ärgern...

    mfg
    murph



  • Tus doch mal so probieren:

    AnsiString ExePath = ExtractFilePath(Application->ExeName);
    ExePath += "xyz.txt";
    StringList->SaveToFile(ExePath);
    

    Immer schön locker bleiben. Net aufregen, nachdenken, Problem lösen.
    Wenn Du Dich aufregst, klappts nie. Die Erkenntnis hab ich auch mit vielen Stunden Mehrarbeit bezahlt.



  • hallo,

    odel:

    String ExePath = ExtractFilePath(ParamStr(0));
    ExePath += "xyz.txt";
    

    mfg
    murph



  • Wobei "String" nichts weiter als ein typedef auf AnsiString ist.

    -junix



  • @murphy:
    Tu ich auch, aber warum sollt ich die SaveToFile-Methode auseinandernehmen, wenn mir das Know-How von zig Usern zur Verfügung steht, die's schon gemacht haben (oder so)? Dazu isja n' Forum da.

    Also: Danke, all ihr hilfsbereiten User da draußen 😃 !



  • Gnunha schrieb:

    Wenn ich vorher aber zum Beispiel
    StringList2->LoadFromFile("C:\DIR\abc.txt");
    schreibe, speichert
    StringList->SaveToFile("xyz.txt");
    die Datei xyz.txt in den Ordner "C:\DIR".

    Du mußt den "\" durch "\" ersetzen, da nämlich "\" eine besondere Sequenz einleitet. "\n" ist nämlich z.B. der Wagenrücklauf.
    Also, die Pfade müssen bei einen c-String durch "\" getrennt werden:

    StringList2->LoadFromFile("C:\\DIR\\abc.txt");
    

    DAnn funzt es auch 😉



  • Application->ExePath! Umpf! Die Lösung lag so nahe.
    Sowas hab ich schon gesucht. Aber wenn man bedenkt, dass mir als Referenz nur das Buch "C++ für Kids" zur Verfügung steht...
    Werd' hier noch öfter vorbeischauen müssen



  • hallo,

    @junix: darum ging es doch gar nicht, das AnsiString und String das selbe sind, aber string was anderes ist, das weiss ich auch. mir ging es um die weitere möglichkeit von ParamStr(0) anstelle von Application.ExeName...

    @Gnuha: du darfst dich nur nicht aus unwissenheit über dinge aufregen, die schon seit jeher so sind wie sie sind. wenn jemand normal fragt, bin ich der letzte der diesen blöd anmacht, wenn aber jemand selber einen scheiss macht und die fragestellung so einleitet: "dieser nervige scheiss..." muss er sich nicht wundern, wenn es aus dem wald so zurückruft wie er reingerufen hat...

    mfg
    murphy


Anmelden zum Antworten