Frage

Nun, wenn ich Daten für eine Maschine zur Anwendung speichern möchten breite ich verwende nur

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

Und wenn ich will, um Daten speichern pro Benutzer i verwenden

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

Aber was, wenn ich Daten pro Anwendungsinstanz speichern möchten? Ich konnte den Ordner verwenden, die die Anwendung gespeichert ist, aber die „Programmdateien“ Ordner werden nicht für diese Art der Datenspeicherung gemacht, wenn ich es richtig verstehen ...

Edit: Um zu klären, was ich meinte, wenn ich die Anwendung 2 mal in untersch Ordner installieren ... nicht-Instanzen leid

.
War es hilfreich?

Lösung

Ich weiß nicht, von einer anderen Anwendung, die das tut.

Wenn ich zwei Kopien von Visual Studio ausführen, sagen wir, erwarte ich, dass die Einstellungen der letzten Instanz diejenigen beibehalten werden geschlossen.

Wenn Sie eine Instanz eine eindeutige Kennung (GUID) zuweisen, wie Sie diesen Wert beim nächsten Mal wieder verwenden laufen Sie die Anwendung? Oder haben Sie einen neuen Satz von Werten jedes Mal, wenn Sie die Anwendung ausführen zu bekommen?

Wenn Sie wieder verwenden möchten, können Sie nummerierte Unterverzeichnisse erstellen (1, 2, 3, 4 usw.), und jedes Mal, wenn die Anwendung eine Sperrdatei in dieses Verzeichnis schreiben laufen. Dann sind Sie auf das Vorhandensein der Sperrdatei und erhöhen die Zahl, bis Sie einen entriegelten Ordner.

UPDATE

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

?

Wenn die Benutzerrechte nicht in diesem Ordner müssten Sie irgendeine Art von Zuordnung zwischen der Lage erstellen und eine GUID (sagen wir), die Sie dann auf die Anwendung und Benutzereinstellungen Pfad angehängt.

Andere Tipps

Warum Sie nicht speichern die Daten im temporären Verzeichnis Path.GetTempPath. Sie können einen Unterordner für Ihre Anwendung verwenden und einen anderen Unterordner (vielleicht ein Guid als Name nützlich wäre) für die Instanz. Ich würde eine Manager-Klasse implementieren, die IDisposable implementiert Entfernen der Instanzpfad zu ermöglichen, wenn die Anwendung beendet wird.

Erstellen Sie eine Instanz Ordner entweder unter dem Benutzerdatenordner oder dem Maschinendatenordner, wenn Sie dies tun müssen, um. Ihre Anwendung könnte keine un-wanted Daten beim Beenden löschen. Obwohl @ChrisF ist recht gängigste Verhalten.

Eine Möglichkeit eine eindeutige ID zum ersten Mal das Programm ausgeführt erzeugen würden und speichern sie auf das Programm (vielleicht eine lokale Konfigurationsdatei) irgendwo spezifisch.

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top