Programm speichert nichts mehr sobald ein OpenDialog in der Funktion benutzt wird ?!



  • Hallo Leute,

    ärger mich schon den ganzen Tag mit folgendem Problem rum, hier erstmal die Funktion

    //Pfad ermitteln
    if(Open->Execute()){Form1->dir = Open->FileName;}   //OpenDialog öffnet Datei
    Form1->dir = Open->FileName;                      //dir = Verzeichnis der Datei
    
    //Datei geöffnet?  Existiert Datei ?  
    if( (Form1->dir != "") && (FileExists(Form1->dir)))
    {
    
    //Ordner erstellen
    if ( !DirectoryExists("user\\"+Form1->user) ) // Ordner "user" existiert bereits
      { CreateDir("user\\"+Form1->user); }        // backup auch
    if (!DirectoryExists("backup\\"+Form1->user)) 
      {CreateDir("backup\\"+Form1->user); }
    
    //user in Liste eintragen
    Form1->benutzer->Items->Add(Form1->user);               //Liste existiert schon
    Form1->benutzer->Items->SaveToFile("user\\user.txt");   
    }
    

    Mein Programm soll folgende Funktion haben:

    1.Man gibt einen Benutzernamen ein der in Form1->user festgelegt wird dann
    2.Danach Öffnet sich das OpenDialog und man wählt eine .cfg Datei

    ---- Bis hierhin kein Probleme !----
    3.Wenn die Datei existiert oder eine ausgewählt wurde:
    2 Unterordner erstellen (Hauptordner existiert bereits) - passiert nix!
    Den Username in einen Memo1 hinzufügen (geht) und dann
    bei user\\user.txt abspeichern - geht nicht!

    Statt abzuspeichern kommt eine Fehlermeldung Datei blabla.. user.txt kann nciht abgespeichert werden...

    Kann sein das das OpenDialog irgendwelche Schreibvorgänge blockiert?!

    Komischerweise sobald das OpenDialog nicht mehr in der Funktion aufgerufen wird, erstellt er die Ordner und überschreibt die txt Datei problemlos!
    Der Code selber enthält auch keine Fehler..

    Ich hoffe jmd kann mir weiterhelfen und kennt das Problem, hab schon alles ausprobiert 😕

    mfg martin



  • Versuche es mal mit absoluten (Application->ExeName, ExtractFilePath) statt relavtiven Pfaden. Ansonsten ist der Debugger Dein Freund.



  • wie gesagt fast schon alles ausprobiert und debugger is bei mir sowiso immer an 😉 trotzdem danke



  • Mach das was Rostfrei[] sagte !!
    welcher Pfad soll das sein ? ("user\\user.txt") das kann ja nicht funktionieren, sobald der Pfad gewechselt wird.
    Außerdem, wenn das alles in ein und der selben Funktion (oder was immer) abläuft bekommst Du Probleme wenn jemand den OpenDialog abbricht.



  • OldMan00 schrieb:

    Mach das was Rostfrei[] sagte !!

    ja hatte das vorher auch so, geht ja auch nicht.

    welcher Pfad soll das sein ? ("user\\user.txt") das kann ja nicht funktionieren.

    Probiers aus es wird gehen, Begriff "Unterordner" ;). Das Programm greift automatisch auf "[PROGRAMMPFAD]\user.txt" zu.

    Wie gesagt am Code selber dürfte es nicht liegen, muss am OpenDialog liegen, hoffe einer weiß mehr wie nur den Debugger einschalten 🙄

    mfg



  • Probiers aus es wird gehen, Begriff "Unterordner" . Das Programm greift automatisch auf "[PROGRAMMPFAD]\user.txt" zu.

    Scherzkeks 😮
    aber nicht mehr, wenn Du durch OpenDialog oder etwas anderes den Pfad wechselst ! Rostfrei[] weiß schon von was er spricht. und es liegt sehrwohl am code. Und solltest Du es wirklich vorher probiert haben, dann war etwas falsch am code.

    (Application->ExeName, ExtractFilePath) statt relavtiven Pfaden

    genau das ist dein Problem 😉



  • habe Deinen Code mit TMemo als Object benutzer getestet und läuft auf BCB6 ohne Fehler. Schau Dir also mal Dein Object benutzer genauer an!



  • Ich werd verrückt es geht :D!!!
    Tut mir leid hab mich geirrt, hatte Form1->pfad als absoluten irgendwie fehlerhaft zugewiesen...

    war schon dabei mir ein openfenster mir der treeviewkomponente zu basteln, aber gott sei dank hab ich grad nochmal hier reingeschaut 🙂 .

    VIELEN DANK für eure Zeit und Mühe!!!

    gruß Martin



  • eine frage noch, der Pfad ändert sich ja wenn man den dialog startet..

    Problem ist bei mir das das Programm nach dieser Aktion weiterläuft und es ziemlich viele Dateien läd bzw. speichert. Ich müsste also bei jeder Verzeichnissangabe bei meinem Fall "Form1->pfad+" davor setzen, was ein Haufen aufwand wäre!!

    Wie kann ich machen, dass nachdem das OpenDialog geschlossen wird und den Pfad übergibt, dass dann für das Programm wieder der Standartpfad festgelegt wird ?
    Der befindet sich bei mir im String "Form1->pfad".



  • Schau unter TOpenDialog::InitialDir
    und
    TOpenDialog::Options ofNoChangeDir


Log in to reply