Вопрос по c# – Где находится правильное место для хранения данных моего приложения?

21

Я разрабатываю небольшую игру C # Winforms, и одна из вещей, которую я хочу сделать, - сохранить данные, специфичные для приложения. Тем не менее, я немного изо всех сил пытаюсь понять правильное место, где это должно быть сохранено.

Насколько я вижу, существует несколько типов данных, которые может хранить приложение, и, соответственно, различные места для их хранения:

1. Application properties - Настройки, например, где приложение хранит свои данные, кем был последний зарегистрированный пользователь, размер окна по умолчанию, положение и т. Д. Предполагается ли, что эта информация будет включена в app.settings или, возможно, в реестр?

2. Global application data - Это может включать в себя спрайты и другие игровые ресурсы, которые используются каждым пользователем, который запускает приложение на этом компьютере. Где будут храниться эти общие данные? Стоит отметить, что в моем конкретном случае эти данные не будут предоставлены при установке по умолчанию, и пользователям будет разрешено добавлять свои собственные игровые ресурсы, которые затем будут доступны любому другому пользователю на том же компьютере.

3. User specific application data - Это будет включать в себя сохраненные пользователем игровые файлы, их конкретные настройки приложения и информацию в их профиле. Где я должен хранить это?

В идеале я хотел бы, чтобы мое приложение было совместимо с Windows XP, Vista, 7 и, конечно же, с готовящейся к выпуску Windows 8 - я не знаю, изменит ли это методы, но надеюсь, что оно поможет в предоставлении рекомендаций.

Это мой первый опыт такого рода разработок, и я был бы признателен за «наилучшую практику». совет.

Ваш Ответ

3   ответа
-3

пользуйте разные файлы для каждого типа.

Это именно то, что я делаю - мне просто нужно знать наилучшее физическое местоположение на диске для их хранения. Martin
23

Вопрос 2
Я предлагаю использовать подпапку вEnvironment.SpecialFolder.CommonAppData (отображается наC:\ProgramData в Windows7 по умолчанию). Это скрытая папка.

Вопрос 3:
Поместите эти файлы вEnvironment.SpecialFolder.AppData (отображается наC:\Users\[USERNAME]\AppData\Roaming по умолчанию, скрытая папка), если вы ожидаете, что пользователь не намерен создавать резервные копии или изменять их. Некоторые игры также помещают свои сохраненные игры вEnvironment.SpecialFolder.MyDocuments, вероятно, потому что пользователям легче найти их там.

Пример кода:

var directory = Environment.GetFolderPath(Environment.SpecialFolder.AppData);


using (FileStream fs = File.Create(Path.Combine(directory, "myAppDirectory", "myFile.txt")))
{
    // write data               
}

Для полный список специальных папок в Windows перейди по ссылк

SIDENOTES

Пользователям разрешено перемещаться по этим каталогам, поэтому убедитесь, что вы используете приведенный выше код В Windows 7 x64 есть ошибка, связанная сCommonAppData каталог и ошибка становится более серьезной в Windows 8 x64 CP. Я писал об этом в блоге: проблемы после перемещения каталога CommonAppData в Windows 7 x64 и Windows 8 x64
Хороший совет. Я отредактировал свой вопрос, чтобы указать, что файлы в вопросе 2 могут быть динамическими. Martin
@ Martin Я обновил свой ответ после того, как перечитал твой вопрос yas4891
Если вы помещаете что-то в папку «Документы», вы должны позволить пользователю щелкнуть по нему и запустить игру с соответствующей загрузкой сохраненной игры. Практически все игры не позволяют этого, поэтому держите его в папке appdata. ZippyV
Спасибо - очень полезно. Martin
поставить третью скобку после "использования (FileStream fs = File.Create (Path.Combine (directory," myAppDirectory "," myFile.txt "))", просто сказав:) Mohammad Mahroz
0

Свойства приложения - Большинство данных приложения, которые вы описали, должны быть индивидуальными для каждого пользователя и помещаться вEnvironment.SpecialFolder.ApplicationData (the%appdata% переменная окружения). Я бы вообще не помещал данные в реестр, так как их трудно найти, отредактировать и исправить. Если вы не хотите, чтобы данные были связаны с пользователем в роуминге (возможно, файлы большого размера или каким-либо образом связаны с компьютером), вы можете поместить их вEnvironement.SpecialFolder.LocalApplicationData (переменная среды `% localappdata%).

Глобальные данные приложения - я бы поместил глобальные данные приложения вEnvironment.SpecialFolder.CommonApplicationData (the%programdata% переменная окружения)

Пользовательские данные приложения - То же, что и № 1, за исключением случаев, когда данные должны быть легко найдены пользователем (например, сохраненные игры), и в этом случае они должны указываться вEnvironment.SpecialFolder.MyDocuments, с которой нет связанной переменной среды.

Как yas4891 указывает, что вы можете надежно получить эти пути к папкам, используяEnvironment.GetFolderPath() используя один из Environment.SpecialFolder` значения перечислены здесь.

Похожие вопросы