2009-06-02 3 views
4

Ну, если я хочу, чтобы хранить данные для машины приложения широко я просто использовать.NET Windows Store Data

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

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

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

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

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

+0

ли экземпляр означает, именованный экземпляр и вы хотите использовать данные эти экземпляры или данные, которые вы хотите сохранить только временными? – crauscher

+0

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

ответ

2

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

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

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

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

UPDATE

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

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

1

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

0

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

0

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

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

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

или

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

Это привело бы к тому, чтобы проблема была такой же, где хранить уникальный? убедитесь, что файл конфигурации, но программа никогда не должна редактировать собственный файл конфигурации, если она хранится в той же папке, что и приложение. – Peter

+0

Это специфичный для установки параметр - пользователю никогда не придется его менять, поэтому его можно настроить. Ад, создайте отдельный текстовый файл в каталоге установки и сохраните его там, если вы не хотите редактировать свой файл app.config. Это кажется самым простым решением с моей точки зрения. –

+0

В качестве альтернативы, хэш или иначе кодируйте путь установки приложения и используйте его как свой уникальный идентификатор. Это предполагает, что пользователь никогда не будет перемещать приложение и всегда будет устанавливать будущие версии на один и тот же путь. –

Смежные вопросы