Speichern von Dateien / Verzeichnisse festlegen



  • Also Quicksave und Benutzerdefiniertes Speichern befinden sich in zwei eigenständigen Funktionen. Dort gibt es dann jeweils eine lokale Variable die den Pfad beinhaltet/aufnimmt.

    Das Laden der Dateien geschieht dann ebenefalls über eigene Funktionen mit eigenen lokalen Variablen die den pfad beinhalten.

    Also daran scheint es nicht zu liegen.



  • also das Verzeichnis deiner Anwendung bekommst Du mit

    string Pfad = Environment.CurrentDirectory + "\\deinedatei.txt";
    


  • War schon mal ein guter Tipp und hat einen Teil des Problems gelöst, aber anscheinend liegt der Fehler noch irgendwie tiefer.

    Und zwar starte ich das Programm normal über eine Desktopverknüpfung.
    Jetzt überschreibt/findet das Programm alle Dateien , soweit alles klar.

    Aber sobald ich wieder manuell speichere, kommt eine Exception, dass er den Pfad

    C:\...\Desktop\datei.txt nicht finden kann

    Es scheint so, als ob der nach dem manuelle Speichern denkt, dass das Programmverzeichnis sich an dem Speicherort befindet .?! 😞



  • Also der statische Pfad muss raus wo der User seine letzte Speicherung gemacht hat muess dynamisch sein.

    Koenntest ja dafuer nen Registryschlüssel erstellen, wo Du das abspeicherst!
    Deine Anwendung such sonst immer diesen Pfad. Ich würde Dir an der Stelle raten ob das was der User speichern tut in dieser art so sinnvoll ist.

    mfg sclearscreen



  • 1.
    Tipp hau den Dialog raus das der User sich aussucht wo er den Mist hinklatschen kann und lass Ihn nur im verzechnis der Anwendung speichern.

    2.
    Oder mach ne Funktion rein die alle Dateien die zu diesem Programm gehören
    auf dem System findet, aber dann brauchts auch ne andere Dateiendung soviel ist klar.

    3.
    Oder ueberdenke das Konzept Deiner Datenspeicherung neu, und ändere es

    mfg 🙂



  • Also möglichkeit 1 , nämlich ein eigener Speicherdialog mit vorgegebenen Speicherort im Programmverzeichnis ändert nichts 😞

    die benutzerdateien werden jetzt fest unter
    Laufwerk:\Programmverzeichnis\Ordner1\benutzer.dk7"
    gespeichert, aber

    jetzt sucht er die Quicksave-Dateien im Verzeichnis, obwohl diese im gleichen Verzeichnis wie die Benutzerdateien angelegt sind
    "Laufwerk:\Programmverzeichnis\Ordner1\Ordner1\datei.dk7"

    Er hängt an den den Programmpfad nochmal den Ordner hintenan.

    Möglichkeit 2 hab ich net den Schimmer wie das funktionieren soll - Eigene Dateiendungen hab ich schon

    Möglichkeit 3 : Eine andere Methode zu speichern erscheint mir nicht wirklich sinnvoll:
    Nur der Benutzer speichert - Volles Risiko viel Arbeit(Spielstand) zu verlieren, falls das System oder das Programm mal abstürzt
    Nur das Programm speichert - Benutzer hat keinen Überblick was wo gespeichert wurde.



  • Zu 1.)

    Um den Speicherndialog sein Suchverzeichnis auch dynmsch an das Programmverzeichnis anzupassen musst Du bevor Du den OpenFileDialog aufmachst

    dem seine Eigenschaft InitialDirectory auch auf das deiner Exe anpassen

    openFilDialog1.InitialDirectory = Environment.CurrentDirectory;
    

    und dann

    if(openFileDialog1.ShowDialog() == DialogResult.Ok)
    {
    ...
    }
    else
    {
    ...
    }
    

    machen

    2.) Eigene Dateiendung

    einfach:

    ... = StreamWriter("dateiname.irgendeZFalsEndung",....);
    


  • Das Problem an der Sache ist, dass nicht nur Speichern und Quicksave getrennt sind, sondern auch Laden einer Benutzerdatei und Quicksave.

    Eine Quicksave Datei wird nämlich automatisch u.a. beim Programmstart geöffnet, um diverse Einstellungen zu laden.
    Das geschieht ohne OpenFileDialog und in dieser Ladefunktion habe ich den Pfad mit

    string Pfad=Environment.CurrentDirectory+"Unterordner\\datei.dk7";
    

    angegeben und trotzdem findet er die Dateien nicht mehr, da er jetzt das "CurrentDirectory" anscheinend als "Programmpfad\\Unterordner" ansieht und sie so in Programmpfad\\Unterordner\\Unterordner\\ sucht.



  • Hab den Fehler behoben. Habe jetzt eine >knirsch< globale Variable die den Pfad von CurrentDirectory bekommt und die diesen Pfad dann bei den Speicher/Ladefunktionen übergibt.

    Anscheinend wurde CurrentDirectory vorher einmal überschrieben, also an das Verzeichnis + Unterordner bei jedem Speichern nochmal der Unterordner angefügt... 🤡

    Danke für deine Hilfe 😉



  • Wenn ich so etwas wie eine Quicksave-Funktion im Hintergrund durchführen lassen will, bastel ich mir immer einen eigenen Thread den ich dann eine bestimmte Zeit idle setze - und der mir bei Durchführung die jeweilige Funktion aufruft


Anmelden zum Antworten