2009-06-02 6 views
4

Nun, wenn ich für eine Maschine zur Anwendung, Daten speichern wollen breit i verwenden nur.NET Windows-Store Data

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

Und wenn ich pro Benutzer, Daten speichern wollen verwenden i

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

Aber was wenn ich Daten pro Anwendungsinstanz speichern möchte? Ich könnte den Ordner verwenden, in dem die Anwendung gespeichert ist, aber die Ordner "Programmdateien" sind nicht für diese Art von Datenspeicher gemacht, wenn ich es richtig verstehe ...

Edit: Um zu verdeutlichen, was ich meinte, wenn ich die installieren Anwendung 2 mal in verschiedenen Ordnern ... nicht Instanzen laufen leider.

+0

Does Instanz benannte Instanz bedeuten und tun Sie die Daten wieder verwenden möchten von diese Instanzen oder sind die Daten, die Sie nur vorübergehend speichern möchten? – crauscher

+0

Um zu verdeutlichen, was ich meinte, wenn ich die Anwendung 2 mal in einem anderen Ordner installiere ... keine Instanzen, die mir leid tun. – Peter

Antwort

2

Ich kenne keine andere Anwendung, die das tut.

Wenn ich zwei Kopien von Visual Studio ausführe, sage ich, ich erwarte, dass die Einstellungen der zuletzt abgeschlossenen Instanz beibehalten werden.

Wenn Sie einer Instanz eine eindeutige ID (GUID) zuweisen, wie können Sie diesen Wert beim nächsten Ausführen der Anwendung wiederverwenden? Oder möchten Sie jedes Mal, wenn Sie die Anwendung ausführen, eine neue Reihe von Werten erhalten?

Wenn Sie wiederverwenden möchten, können Sie nummerierte Unterverzeichnisse (1, 2, 3, 4 usw.) erstellen und jedes Mal, wenn Sie die Anwendung ausführen, eine Sperrdatei in dieses Verzeichnis schreiben. Überprüfen Sie dann das Vorhandensein der Sperrdatei und erhöhen Sie die Anzahl, bis Sie einen entsperrten Ordner gefunden haben.

UPDATE

Im Lichte des Kommentars hinzugefügt - warum nicht den Pfad der ausführbaren Datei erhalten und einen Ordner unter dem schaffen?

Wenn der Benutzer keine Rechte für diesen Ordner hat, müssten Sie eine Art Mapping zwischen dem Speicherort und einer GUID (etwa) erstellen, die Sie dann an den Anwendungseinstellungen und Benutzereinstellungen Pfad angefügt haben.

1

Warum speichern Sie die Daten nicht im temporären Verzeichnis Path.GetTempPath. Sie können einen Unterordner für Ihre Anwendung und einen anderen Unterordner (möglicherweise einen Guid als Namen) für Ihre Instanz verwenden. Ich würde eine Managerklasse implementieren, die IDisposable implementiert, um das Entfernen des Instanzpfades beim Beenden der Anwendung zu ermöglichen.

0

Erstellen Sie einen Instanzordner entweder im Benutzerdatenordner oder im Maschinendatenordner, wenn Sie dies tun müssen. Ihre Anwendung könnte unerwünschte Daten beim Beenden entfernen. Obwohl @ChrisF recht hat mit dem üblichen Verhalten.

0

Eine Möglichkeit wäre, eine eindeutige ID zu erzeugen, wenn das Programm zum ersten Mal ausgeführt wird, und es irgendwo für das Programm zu speichern (vielleicht eine lokale Konfigurationsdatei).

Dann, wenn Sie die Dateien für die jeweilige Kopie der Anwendung zugreifen möchten, verwenden Sie einfach

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "\" + uniqueid); 

oder

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid); 
+0

Dies würde zu genau demselben Problem führen, wo die UniqueID gespeichert werden soll? Sicher eine Konfigurationsdatei aber ein Programm sollte nie seine eigene Konfigurationsdatei bearbeiten, wenn sie im selben Ordner wie die Anwendung gespeichert ist. – Peter

+0

Dies ist jedoch eine installationsspezifische Einstellung - der Benutzer wird es nie ändern müssen, daher ist es in Ordnung, dass das Programm es einstellt. Hell, erstellen Sie eine separate Textdatei im Installationsverzeichnis und speichern Sie sie dort, wenn Sie Ihre app.config nicht bearbeiten möchten. Es scheint aus meiner Sicht die einfachste Lösung zu sein. –

+0

Alternativ können Sie den Installationspfad für die Anwendung hashen oder anderweitig codieren und diesen als Ihre eindeutige ID verwenden. Dies setzt voraus, dass der Benutzer die Anwendung niemals verschiebt und immer zukünftige Versionen auf den gleichen Pfad installiert. –

Verwandte Themen