.NET Windows Store Data - PullRequest
       9

.NET Windows Store Data

4 голосов
/ 02 июня 2009

Ну, если я хочу сохранить данные для всей машины приложения, я просто использую

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

И если я хочу сохранить данные для каждого пользователя, я использую

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

Но что, если я хочу сохранить данные для каждого экземпляра приложения? я мог бы использовать папку, в которой хранится приложение, но папки «программные файлы» не созданы для этого типа хранилища данных, если я правильно понимаю ...

Изменить: Чтобы уточнить, что я имел в виду, если я устанавливаю приложение 2 раза в разные папки ... не работает экземпляры извините.

Ответы [ 4 ]

2 голосов
/ 02 июня 2009

Я не знаю ни одного другого приложения, которое делает это.

Если я запустлю две копии Visual Studio, скажем, я ожидаю, что настройки последнего закрытого экземпляра будут сохранены.

Если вы назначаете экземпляру уникальный идентификатор (GUID), как вы будете использовать это значение при следующем запуске приложения? Или вы хотите получать новый набор значений при каждом запуске приложения?

Если вы хотите использовать повторно, вы можете создавать пронумерованные подкаталоги (1, 2, 3, 4 и т. Д.) И каждый раз, когда вы запускаете приложение, записывать файл блокировки в этот каталог. Затем проверьте наличие файла блокировки и увеличивайте число до тех пор, пока не найдете разблокированную папку.

UPDATE

В свете добавленного комментария - почему бы не получить путь к исполняемому файлу и создать папку под ним?

Если у пользователя нет прав на эту папку, вам придется создать какое-то отображение между местоположением и GUID (скажем), которое вы затем добавляете в настройки приложения и путь к настройкам пользователя.

1 голос
/ 02 июня 2009

Почему бы вам не сохранить данные во временном каталоге Path.GetTempPath. Вы можете использовать подпапку для своего приложения и другую подпапку (может быть, Guid как имя будет полезно) для вашего экземпляра. Я хотел бы реализовать некоторый класс менеджера, который реализует IDisposable, чтобы позволить удалить путь к экземпляру, когда приложение закрывается.

0 голосов
/ 02 июня 2009

Одной из возможностей будет создание уникального идентификатора при первом запуске программы и его сохранение в каком-то определенном месте для программы (возможно, в локальном файле конфигурации).

Затем, когда вы хотите получить доступ к файлам для этой конкретной копии приложения, просто используйте

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

или

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid);
0 голосов
/ 02 июня 2009

Создайте папку экземпляра либо в папке пользовательских данных, либо в папке машинных данных, если вам нужно это сделать. Ваше приложение может удалить любые ненужные данные при выходе. Хотя @ChrisF прав насчет самого обычного поведения.

...