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 esmfg
-
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, aberjetzt 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 mitstring 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