Где место для хранения моих конкретных данных?
Я разрабатываю небольшую игру С# Winforms, и одна из вещей, которую я хочу сделать, - это сохранить данные, специфичные для приложения. Тем не менее, я немного пытаюсь понять правильное место, которое должно быть сохранено.
Насколько я вижу, есть несколько типов данных, которые может хранить приложение, и, соответственно, разные места для его хранения:
1. Свойства приложения
- Настройки, например, когда приложение хранит данные, кто был последним зарегистрированным пользователем, размер окна по умолчанию, позиция и т.д. Предполагается ли, что эта информация входит в настройки приложения или, возможно, в реестр?
2. Глобальные данные приложения
- Это могут быть спрайты и другие игровые ресурсы, которые используются каждым пользователем, который запускает приложение на этом компьютере. Где будут храниться эти общие данные? Стоит отметить, что в моем конкретном случае эти данные не будут предоставлены установкой по умолчанию, и пользователям будет разрешено добавлять свои собственные игровые ресурсы, которые затем должны быть доступны любому другому пользователю на том же компьютере.
3. Пользовательские данные приложения
- Это будет включать в себя файлы сохраненных игр пользователей, их конкретные настройки приложений и их информацию о профиле. Где я должен хранить это?
В идеале я хочу, чтобы мое приложение совместимо с Windows XP, Vista, 7 и, конечно же, на предстоящей Windows 8 - я не знаю, изменяет ли это методы, но, надеюсь, это поможет в предоставлении консультаций.
Это мой первый набег на такое развитие, и я был бы признателен за совет "лучшей практики".
Ответы
Ответ 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
Почему вы не сохраняете данные в объекте и не записываете его в файл. Используйте разные файлы для каждого типа.