Где место для хранения моих конкретных данных? - программирование

Где место для хранения моих конкретных данных?

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Вопрос 3:
Поместите эти файлы в Environment.SpecialFolder.AppData (карты по умолчанию C:\Users\[USERNAME]\AppData\Roaming по умолчанию, скрытая папка), если вы ожидаете, что пользователь не намерен создавать резервные копии/изменять их. Некоторые игры также помещают свои save игры в 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

Ответ 2

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

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

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

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

Ответ 3

Почему вы не сохраняете данные в объекте и не записываете его в файл. Используйте разные файлы для каждого типа.