ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
478
478
EMPFEHLEN
-
Hallo zusammen
Unterdessen habe ich schon ein paar Progrämmchen geschrieben und bin bei einigen immer wieder auf das selbe Problem gestossen.
Ich möchte den Beützer fragen, ob er ein Dokument, dass er schliesst, speichern möchte.
Natürlich soll die Frage nur erscheinen, wenn es Änderungen am Dokument gegeben hat.
Wie geht Ihr vor, um Änderungen am Dokument zu erkennen?
Ich habe da zwei verschiedene Ideen:
1.) Bei jeder Operation am Dokument wird eine Variable (bool) so gesetzt, dass sie eine Änderung am anzeigt.
2.) vom Dokument wird beim Öffnen eine Kopie im Speicher abgelegt. Beim Schliessen des aktuellen Dokuments wird mit der ursprünglichen Version verglichen.
Natürlich haben beide Vorschläge Vor- und Nachteile. Bei 1. muss man daran denken, dass man in jeder Funktion die das Dokument ändert, die Variable, die Änderungen anzeigt, setzt. Bei der 2. Variante braucht man mehr Speicher. Ausserdem muss man beim Speichern des Dokuments die Version im Speicher anpassen.
Wie macht ihr das? Habt ihr noch alternative Ideen? Gibts da irgendwelche verbreiteten Design Patterns?
Asserdem interessiert es mich, wie verschiedene Frameworks/Bibliotheken dieses Problem Angehen. Besonders C# mit Widows Forms und C++ mit Qt.
danke für eure Hilfe!
Gruss LukeS
-
Ich bin für Variante 1.
Für den Programmierer ist 2. eventuell einfacher, da er nicht immer auf die bool aufpassen muss, aber es geht ja um die Anwender.
Und soo eine Herausforderung ist es ja nun auch wieder nicht, konsequent durch das ganze Programm bools zu setzen
Variante 2 ist sowieso grauenhaft.
Memory mal 2, Performance beim Schließen...ohne Worte.
Wenn man partout kein bool willst, könnte man ja was mit einer Checksumme drehen...da bräuchte man wenigstens nicht alles zweimal.
Beim Speichern Checksumme mit in die Datei schreiben, beim Öffnen in einer Variable behalten und beim Schließen vom Dokument im Speicher neu berechnen und mit der Alten Vergleichen.
GrußGeändert von sheel (14.12.10 um 01:14 Uhr) Grund: Tippfehler
-
Wenn man Undo- und Redo-Funktionalität einbaut, dann ist Variante 1 auch nicht so einfach zu implementieren. Denn wenn der Anwender so lange "Undo" drückt, bis alles in dem Zustand ist der zuletzt gespeichert wurde, dann sollte erkannt werden, dass das Dokument derzeit unverändert ist. Ich tendiere aber auch eher zu Variante 1.
hihi = -h²
-
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Danke für eure Antworten.
Habe bisher auch immer 1. verwendet. War mir jedoch nicht sicher wie der state of the art so allgemein ist.
Das mit der Checksumme ist auch eine gute Idee.
Vielen dnk nochmal!
Gruss LukeS
-
15.12.10 11:07 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Man kann das Command Design Pattern (http://en.wikipedia.org/wiki/Command_pattern) dafür verwenden.
Falls du Undo/Redo Funktionen hast, dann brauchst du natürlich keine boolsche Variable, dann mußt du nur schauen ob der Undo-Puffer leer ist.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
15.12.10 12:01 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
18.12.10 20:39 #9
- Registriert seit
- Mar 2007
- Beiträge
- 95
Hallo zusammen!
Ich würde beim Einlesen der Daten eine Checksumme berechnen und diese in einer Variablen speichern.
Jetzt gibt es 2 Möglichkeiten weiter zu verfahren.
1. Die berechnete Checksumme wird jetzt einer weiteren Variable zugewiesen. Bei jeder Änderung der Daten wird die Checksumme neu berechnet und dieser zweiten Variablen zugewiesen. Beim Beenden braucht man beide Variable nur zu vergleichen - sind sie gleich muß nicht gespeichert werden im anderen Falle ja.
2. Die Checksumme wird nur beim Beenden neu berechnet und mit der Anfangschecksumme verglichen. In Abhängigkeit vom Ergebnis wird dann entsprechend vorgegangen.
Ich denke mal beide Varianten haben Vor und Nachteile - man muß es einfach probieren. Man sollte auch noch daran denken falls der User zwischendurch speichert muß man auch die Variablen entsprechend anpassen. Speichern der Daten entspricht in dieser Hinsicht dem Öffnen des Dokumentes.
Ich habs bei meinem Programm aber auch bisher über boolsche Variablen gelöst, da es für meine Belange die einfachste Variante ist.
Schwieriger wird es wenn man zuläßt, daß mehrere Dokumente gleichzeitig geöffnet sein können und auch bearbeitet werden können. Da man dann mit SIcherheit mit einem entsprechend angepassten Datenobjekt arbeitet, würde ich jedes Datenobjekt um zwei Variable ergänzen, die die Checksummen aufnehmen und wahrscheinlich nach Methode 2 (Checksumme bei jeder Änderung aktualisieren) arbeiten . Beim Beenden muß man jetzt nur noch durch alle Datenobjekte itterieren und die Checksummen vergleichen.
-
20.12.10 09:06 #10
Hast du schon mal daran gedacht, dass die Berechnung der Checksumme auch etwas Zeit kostet? Wenn ich mit zehn-Fingern tippe, wird das Programm nicht nachkommen nach jeder Änderung (also jedem Tastendruck) diese neu zu berechnen. Habe es mit MD5 und SHA-1 mal ausprobiert bei mind. 250 Anschläge in der Minute kommt, das Programm nicht mehr mit!
Das ist jedenfalls die klügere Alternative, die ich auch auf in diesem Fall vorziehen würde (ich hätte es auch über eine Bool-Variable gemacht, keine Berechnung nötig!). Hier wird die Berechnung nur einmal gemacht und das reicht völlig aus.
Den wirklichen Vorteil von Variante 1 kann ich nicht sehen!
Gruß
RudolfGTechnologien
(Gute) Grundkenntnisse: HTML, CSS
Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL
Ähnliche Themen
-
Speichern eines Strings in einer bestimmten Zeile in einem Text Dokument
Von finnex im Forum PHPAntworten: 4Letzter Beitrag: 21.08.08, 16:10 -
Wysiwyg Änderungen speichern
Von tommycush im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 26.01.07, 00:55 -
Photo Impact 8 - Änderungen nach speichern
Von jensjensen1977 im Forum Sonstige Grafik-ProgrammeAntworten: 0Letzter Beitrag: 30.04.05, 20:05 -
Änderungen in Tabelle - Speichern
Von shok im Forum .NET ArchivAntworten: 1Letzter Beitrag: 16.06.04, 11:36 -
[vc++][winapi] Array in Datei speichern ohne nachfrage.
Von Jimbo2001 im Forum C/C++Antworten: 1Letzter Beitrag: 09.01.04, 10:02





Zitieren



Login





