Speichern von Dateien / Verzeichnisse festlegen



  • Hallo,
    ich habe ein Programm , dass nach bestimmter Zeit automatisch in eine Datei (Quicksave) zwischenspeichert. (Über Streanwriter auf einen Pfad "datei.txt")

    Der benutzer kann jedoch auch manuell in eine eigene Datei speichern, was mittels savefiledialog funktioniert.

    Wenn jedoch vom benutzer eine Datei gespeichert wurde, findet das Programm die "Quicksave" Dateien nicht mehr, da er sie jetzt in dem Verzeichnis sucht, in dem der Benutzer seine Datei angelegt hat.

    Ich möchte jedoch auch nicht einen absolut festen Pfad für die Quicksave Dateien vorgeben, wie zum Beispiel "C:\\Ordner\\datei.txt" , sondern, die Quicksave Dateien immer in einem Unterverzeichnis meines Programms halten bzw. "E:\\MeinProgramm\\Unterordner\\datei.txt"
    sodass ich nicht an ein bestimmtes Laufwerk gebunden bin.

    Wie lässt sich so etwas einrichten?



  • also ich vermute Du benutzt fuer den Qucksave und die Benutzerdefinierte Speicherung ein und dieselbe Variable vom Typ string

    ich würde daher sagen du hast einfach vergessen das Du bei Eintritt der benutzedefinierten Speicherung Dir den Inhalt dieser Variablen zu sichern.

    Um nach der benutzdefinierten Aktion das Backup wieder auf die Variable zu ziehen! Dann sollte die dynamische Speicherung auch wieder den alten Inhalt in der Variablen finden. Dann musst Du auch einplanen wenn Du wirklich nur diese ein Variable nutzen willst den Prozess der den zeitlichen Quicksave macht fuer die Zeit der benutzdefinierten Speicherung zu unterbrechen. Ohne eine Sicherung der Daten die Du fuer den Vorgang brauchst wird es nicht gehen.
    Überprüfe mal dahingehend Deinen Code!

    Ich hoffe ich konnte den/die Gedanken glasklar vermitteln.
    Oder nimm eben 2 Variablen fuer die Pfadangabe.

    string PfadQuicksave = "...";
    string PfadUsersave = "...";
    

    🙂



  • 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