У який каталог писати гру збереження файлів / даних?


37

Мені потрібен певний список каталогів, один або декілька на кожній платформі, куди можна розмістити файли збереження гри та інші дані, створені в грі . Або на основі специфікації розробника ОС, або тому, що це звичайне використання, якщо немає рекомендацій.

Будь ласка, надайте одну відповідь на кожній платформі з різними каталогами. Також найкращим є приклад того, як отримати розташування каталогу в C ++ або C , оскільки це мова, у якої ви будете мати більше труднощів.

Розташування:

  • Дані про ігри гравця (збережені ігри, конфігурація).
  • Дані про спільну гру (наприклад, рейтинг або конфігурація для всіх користувачів комп'ютера).
  • Тимчасові дані гри (aka кеш-каталог).

1
Ви, ймовірно, повинні скласти всі відповіді в одну, оскільки не існує жодної відповіді?
Золомон

@Zolomon Проблема полягає в тому, що одна відповідь з усіма платформами буде занадто великою, я думаю. Зокрема, якщо ви додасте мобільні / планшетні платформи ...
Klaim

можливо, варто відзначити (оскільки може бути більше тих, хто поділяє цю думку), що принаймні я ненавиджу, коли ігри не зберігають у своїх шанобливих (встановлених) каталогах. Мені подобаються ігри, в яких ігрові користувачі створюються в грі, і більше не ховається: ПК, які я використовую для ігор, ніколи не є достатньо багатокористувацьким, щоб взагалі використовувати користувачів ОС. Або якщо він повинен використовувати це, мені подобаються ігри, які роблять це всередині. Можливо, це не так, але: думка про одного користувача ОС = один фрагмент ігрового користувача alterego також викликає неприємності. Примітка: я геймер Windows. на * unix все інакше, фіксований FS змушує концепцію (приводів немає)
n611x007

@naxa Якщо це може вас "втішити", я створюю гру, в якій є управління обліковими записами гравців всередині, але облікові записи гравців все ж повинні зберігатися в обліковому записі користувача з міркувань безпеки ОС. Я також можу зберігати їх у спільному репо, не впевнений. Також мені потрібно дозволити користувачам зберігати дані в Інтернеті в якийсь момент.
Клайм

3
@naxa Проблема полягає в тому, що на Vista, Windows7, Windows8, якщо спеціально не працювати як адміністратор, програми не зможуть записувати до програмних файлів \ Game-Install-Dir \. Я вважаю, що це стосується і останніх версій Linux та OSX.
Нейт

Відповіді:


23

Windows (Xp та наступні)

На основі:

Ці місця передбачають, що Windows встановлено на диску C:. Додайте власний каталог із назвою гри або ігровою компанією, а потім іменем гри в ці каталоги.


Якщо ви використовуєте додаток у стилі метро Window 8 , вам доведеться використовувати певний API, а не намагатися дістатися до каталогів. Прочитайте:


Дані про гравця гравця

Windows Vista та наступні версії:

C: \ Користувачі \ {ім'я користувача} \ AppData \ Роумінг

Windows Xp:

C: \ Документи та налаштування \ {ім'я користувача} \ Дані програми

Ви можете автоматично отримати потрібну залежну від імені користувача адресу, отримавши APPDATAзмінну середовища .

Стандарт C (усі компілятори):

char* appdata = getenv("APPDATA");

Visual Studio 20xx ( уникайте попередження getenv () про те, що це не безпечно ) - не в стилі метро:

char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "APPDATA" ); 

Підвищують користувачів : на даний момент я пишу цю boost.filesystem (тобто чернетку бібліотеки файлової системи, запропоновану до наступного стандарту C ++) ще не реалізує функцію забезпечення потрібного каталогу. Однак раніше про це йшлося обговорення . Будь ласка, не соромтеся оновити цей розділ, якщо все змінилося.


Спільні дані про ігри

Windows Vista та наступні версії:

C: \ ProgramData

Windows Xp:

C: \ Документи та налаштування \ Усі користувачі

Ви можете автоматично отримати правильну адресу, отримавши PROGRAMDATAзмінну середовища .

Стандарт C (усі компілятори):

char* appdata = getenv("PROGRAMDATA");

Visual Studio 20xx ( уникайте попередження getenv () про те, що це не безпечно ) - не в стилі метро:

char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "PROGRAMDATA" ); 

Підвищують користувачів : на даний момент я пишу цю boost.filesystem (тобто чернетку бібліотеки файлової системи, запропоновану до наступного стандарту C ++) ще не реалізує функцію забезпечення потрібного каталогу. Однак раніше про це йшлося обговорення . Будь ласка, не соромтеся оновити цей розділ, якщо все змінилося.


Тимчасові дані гри

Windows Vista та наступні версії:

C: \ ProgramData

Windows Xp:

C: \ Документи та налаштування \ {ім'я користувача} \ Локальні налаштування \ Темп

Ви можете автоматично отримати правильну адресу, отримавши TEMPзмінну середовища .

C ++ користувачі Підвищення : є простий крос-платформний функція Boost.Filesystem для цього

namespace bfs = boost::filesystem;
const bfs::path TEMP_DIR = bfs::system_complete( bfs::temp_directory_path() ); // system_complete() call is optional

Стандарт C (усі компілятори):

char* appdata = getenv("TEMP");

Visual Studio 20xx ( уникайте попередження getenv () про те, що це не безпечно ) - не в стилі метро:

char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "TEMP" ); 

4
На ОС Vista і вище, ігрові збереження повинні бути розміщені в спеціальній папці "Збережені ігри". Більше інформації тут: msdn.microsoft.com/en-us/library/windows/desktop/… Шукайте "FOLDERID_SavedGames"
Durza007

1
Вам ніколи не слід намагатися самостійно відгадувати шлях або побудувати його із змінних оточуючих. У Vista та вище слід зателефонувати SHGetK PoznaFolderPath ( msdn.microsoft.com/en-us/library/bb762188.aspx ), а на XP та нижче використовувати SHGetFolderPath ( msdn.microsoft.com/en-us/library/bb762181.aspx )
Кілотан

@Kylotan і Durza007, мені трохи не вистачає часу, сміливо відредагуйте цю відповідь за необхідності. Зробила цю відповідь вікі спільноти.
Клайм

Я думаю, що важливо сказати, що документація msdn пропонує використовувати SHGetKknownFolderPath, оскільки SHGetFolderPath є лише обгорткою для нового методу і підтримується лише для зворотної сумісності.
Кагемуша

16

MacOS

На основі:

У ОС на базі unix ~каталог автоматично розміщується в домашньому каталозі користувача, де знаходяться дані, визначені для користувача. Це означає, що незалежно від мови, на цих платформах ви можете автоматично отримувати доступ до цієї папки, використовуючи ~замість функції, характерної для ОС. Також зауважте, що /це кореневий шлях всієї системи, а не шлях до кореня основного диска.

Додайте власний каталог із назвою гри або ігровою компанією, а потім іменем гри в ці каталоги.


Дані про гравця гравця

Настанова Apple полягає в тому, щоб знайти там збережені та конфігурувати файли, щоб автоматично зберігати їх у хмарі, якщо вони доступні:

~ / Документи

Однак краще (і частіше використовується) практика пошуку цих файлів у:

~ / Бібліотека / Підтримка програм /

Тільки знайте, що в цьому випадку файли не будуть автоматично зберігатися у хмарі. Якщо ви хочете, щоб гравець вибирав, використовуйте API платформи, щоб зробити його вибір.

Спільні дані про ігри

/ Бібліотека / Підтримка програм

Зауважте, що немає ~ , це не стосується дому користувача, а кореня системи.

Тимчасові дані гри:

Якщо дані не потрібно зберігати між стратами:

/ tmp

Якщо дані потрібно зберігати між стратами;

/ Бібліотека / Кеші (для MacOSX)

C ++ користувачі Підвищення : є простий крос-платформний функція Boost.Filesystem для цього

namespace bfs = boost::filesystem;
const bfs::path TEMP_DIR = bfs::system_complete( bfs::temp_directory_path() ); // system_complete() call is optional

4
Нічого не поміщайте ~/Documents. Тобто користувач вирішив організувати; ніколи не слід писати на фіксований шлях всередині Документів. Ваша гра повинна використовуватись ~/Library/Application Support/Your App Name/для збереження та інших даних користувачів.
Кевін Рейд

@KevinReid "Документи, які користувач створює та бачить у користувальницькому інтерфейсі програми. Наприклад, браузери документів у" Сторінках "," Номери "та" Основні відомості "повинні зберігатися в каталозі" Документи ". Ще один приклад файлів, які можуть перейти до каталогу" Документи ", - це збережені ігри , знову ж таки тому, що вони є тим, що програма може потенційно запропонувати певний метод вибору. " - Джерело: рекомендація Apple, у першому посиланні. Я щось пропустив?
Клайм

2
У всьому з них акцент робиться на виборі . Користувач вибирає, як їх назвати і куди вони йдуть. Файли, якими користувач не керує, не слід розміщувати в Документах, оскільки "Документи" - це область імен користувача, а не розробник. (Відмова: Я не стверджую, що моя порада відповідає документації Apple. Я стверджую, що вона відображає більшість практик серед програм, призначених для Mac, і що користувачі будуть щасливішими з цим.)
Кевін Рід,

Крім того, в pre-X Mac OS не було каталогів "Бібліотека". Зауваження “(OS X)” у зв'язаній документації контрастують з iOS , що є зовсім іншим питанням, оскільки iOS не відкриває файлову систему користувачеві.
Кевін Рейд

@KevinReid Я оновлю бібліотечні речі, дякую. Однак, що ви говорите про вибір та Документи, це здається суперечливим. Ігри збереження відносяться до користувачів, а не до програми чи розробника. Ну, це залежить від гри, через що також існує спільний каталог даних про ігри. Тож я не розумію, що саме ви маєте на увазі. Чи є десь таке раціональне?
Клайм

13

Linux Debian (Ubuntu, Fedora тощо)

На основі:

У ОС на основі unix каталог ~ автоматично розміщується в домашній директорії користувача, де знаходяться дані, що стосуються користувача. Це означає, що незалежно від мови, на цих платформах ви можете автоматично отримувати доступ до цієї папки, використовуючи ~ замість функції, характерної для ОС. Також зауважте, що / є кореневий шлях всієї системи, а не шлях до кореня основного диска.

Додайте власний каталог із назвою гри або ігровою компанією, а потім іменем гри в ці каталоги.


Дані про гравця гравця

Традиційно для гри Aquaria це було б:

~ / .aquaria

Зауважте, що каталоги та файли, що починаються з ., за замовчуванням будуть приховані для користувача.

Зараз більшість настільних комп'ютерів намагаються дотримуватися специфікації XDG , яку рекомендують

$ XDG_CONFIG_HOME / акваріуми

або

$ XDG_DATA_HOME / акваріуми

для конфігурації та збереження ігор.

Якщо $XDG_CONFIG_HOMEне встановлено використання:

~ / .config / aquaria

або

~ / .local / акваріуми

Здебільшого це стосується домашнього каталогу користувачів, а також дозволяють користувачам запускати кілька профілів програми, якщо вони вважають це за потрібне. У специфікації є й інші спеціалізовані каталоги, що відповідають певним користувачам.

Спільні дані про ігри

/ var / ігри /

Спільні файли конфігурації повинні розміщуватися в

/ тощо / ігри /

Тимчасові дані гри

/ tmp


1
Щоб уточнити: гра "Акваріум" повинна розмістити свої дані гри в ~ / .aquaria (або ~ / .config / Aquaria). Це нахмурилося мати каталог, що записується у світі, в / var; загальний спосіб зробити це - створити обліковий запис користувача для вашої гри і зробити це єдиним обліковим записом, який може записувати в цей каталог (а потім використовувати налаштування, коли звичайні люди грають у цю гру). Це може бути більше роботи, ніж ви хочете.
dhasenan

Ну, насправді, більшість настільних комп'ютерів зараз намагаються дотримуватися специфікації XDG, яка рекомендує $ XDG_CONFIG_HOME / aquaria (або ~ / .config / aquaria, якщо не встановлено) та $ XDG_DATA_HOME / aquaria (або ~ / .local / aquaria) для налаштування та замість збереження ігор (див. standard.freedesktop.org/basedir-spec/basedir-spec-latest.html ). Здебільшого це стосується домашнього каталогу користувачів, а також дозволяють користувачам запускати кілька профілів програми, якщо вони вважають це за необхідне. У специфікації є й інші спеціалізовані каталоги, що відповідають певним користувачам.
liori

@liori Я оновлю відповіді завтра, якщо знайду час, вибачте за затримку. Якщо вам здається, що у вас є час, будь ласка, не соромтеся оновити інформацію. Це теж корисно і мені.
Клайм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.