W jakim katalogu pisać pliki / dane do zapisywania gier?


37

Potrzebuję określonej listy katalogów, jednego lub więcej na platformę, gdzie umieścić pliki zapisywania gier i inne dane generowane przez grę . Albo na podstawie specyfikacji programisty systemu operacyjnego, albo dlatego, że nie ma rekomendacji.

Podaj jedną odpowiedź na platformę , z różnymi katalogami. Najlepszym przykładem jest sposób uzyskania lokalizacji katalogu w C ++ lub C , ponieważ jest to język, w którym będziesz miał więcej trudności.

Lokalizacje:

  • Dane gry gracza (zapisane gry, konfiguracja).
  • Wspólne dane gry (takie jak najlepszy wynik lub konfiguracja dla wszystkich użytkowników komputerów).
  • Tymczasowe dane gry (inaczej katalog pamięci podręcznej).

1
Prawdopodobnie powinieneś umieścić wszystkie odpowiedzi w jednym, ponieważ nie ma jednej odpowiedzi do zaakceptowania?
Zolomon,

@Zolomon Problem polega na tym, że jedna odpowiedź ze wszystkimi platformami będzie zbyt duża. W szczególności, jeśli dodasz platformy mobilne / tablety ...
Klaim

warto zauważyć (ponieważ może być więcej osób, które podzielają tę opinię), że przynajmniej nienawidzę, gdy gry nie zapisują się w swoich katalogach z szacunkiem (instalacją). Lubię gry, w których tworzy się użytkowników w grze, i nie trzeba już ukrywać: komputery, których używam do grania, nigdy nie są wystarczające dla wielu użytkowników, aby w ogóle móc korzystać z systemu operacyjnego. Lub jeśli trzeba go używać, lubię gry, które robią to wewnętrznie. Być może nie jest tak, ale: niepokojący jest również pomysł jednego użytkownika systemu operacyjnego = jednego użytkownika gry. Uwaga: jestem graczem Windows. na * unixie jest inaczej, stały FS wymusza koncepcję (nie ma napędów)
n611x007

@naxa Jeśli to może Cię pocieszyć, tworzę grę z zarządzaniem kontami graczy, ale konta graczy nadal muszą być przechowywane na koncie użytkownika ze względów bezpieczeństwa systemu operacyjnego. Mogę też przechowywać je w repozytorium udostępnionym, nie jestem pewien. Ponadto w pewnym momencie będę musiał umożliwić użytkownikom przechowywanie danych online.
Klaim

3
@naxa Problem polega na tym, że w systemach Windows Vista, Windows7 i Windows8, chyba że są one specjalnie uruchamiane jako administrator, programy nie będą mogły zapisywać w folderze Program Files \ Game-Install-Dir \. Uważam, że dotyczy to również nowszych wersji systemu Linux i OSX.
Nate

Odpowiedzi:


23

Windows (XP i kolejne)

Oparte na:

W tych lokalizacjach założono, że system Windows jest zainstalowany na dysku C:. Dołącz własny katalog z nazwą gry lub firmą, a następnie nazwą gry do tych katalogów.


Jeśli używasz aplikacji w stylu Windows 8 Metro , będziesz musiał użyć konkretnego interfejsu API zamiast próbować dotrzeć do katalogów. Czytać:


Dane gry gracza

Windows Vista i następujące:

C: \ Users \ {nazwa użytkownika} \ AppData \ Roaming

Windows XP:

C: \ Documents and Settings \ {nazwa użytkownika} \ Dane aplikacji

Możesz automatycznie uzyskać właściwy adres zależny od nazwy użytkownika, pobierając APPDATAzmienną środowiskową .

Standard C (wszystkie kompilatory):

char* appdata = getenv("APPDATA");

Visual Studio 20xx ( unikaj ostrzeżenia getenv () mówiącego, że to nie jest bezpieczne ) - nie w stylu Metro:

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

Zwiększ użytkowników : w tej chwili piszę ten boost.filesystem (który jest także szkicem biblioteki systemu plików zaproponowanym do następnego standardu C ++) nie implementuje jeszcze funkcji zapewniającej właściwy katalog. Jednak wcześniej o tym dyskutowano . Zaktualizuj tę sekcję, jeśli coś się zmieniło.


Udostępnione dane gry

Windows Vista i następujące:

C: \ ProgramData

Windows XP:

C: \ Documents and Settings \ Wszyscy użytkownicy

Możesz automatycznie uzyskać właściwy adres, uzyskując PROGRAMDATAzmienną środowiskową .

Standard C (wszystkie kompilatory):

char* appdata = getenv("PROGRAMDATA");

Visual Studio 20xx ( unikaj ostrzeżenia getenv () mówiącego, że to nie jest bezpieczne ) - nie w stylu Metro:

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

Zwiększ użytkowników : w tej chwili piszę ten boost.filesystem (który jest także szkicem biblioteki systemu plików zaproponowanym do następnego standardu C ++) nie implementuje jeszcze funkcji zapewniającej właściwy katalog. Jednak wcześniej o tym dyskutowano . Zaktualizuj tę sekcję, jeśli coś się zmieniło.


Tymczasowe dane gry

Windows Vista i następujące:

C: \ ProgramData

Windows XP:

C: \ Documents and Settings \ {nazwa użytkownika} \ Ustawienia lokalne \ Temp

Możesz automatycznie uzyskać właściwy adres, uzyskując TEMPzmienną środowiskową .

C ++ użytkowników Boost : jest prosty cross-platform funkcja boost.filesystem tego

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

Standard C (wszystkie kompilatory):

char* appdata = getenv("TEMP");

Visual Studio 20xx ( unikaj ostrzeżenia getenv () mówiącego, że to nie jest bezpieczne ) - nie w stylu Metro:

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

4
W systemie Vista i nowszym zapisy gier powinny być umieszczone w specjalnym folderze „Zapisane gry”. Więcej informacji tutaj: msdn.microsoft.com/en-us/library/windows/desktop/... Poszukaj „
FOLDERID_SavedGames

1
Naprawdę nigdy nie powinieneś próbować zgadywać ścieżki ani konstruować jej na podstawie zmiennych środowiskowych. W systemie Vista i nowszych wersjach należy wywołać SHGetKnownFolderPath ( msdn.microsoft.com/en-us/library/bb762188.aspx ), a na XP i niższych należy użyć SHGetFolderPath ( msdn.microsoft.com/en-us/library/bb762181.aspx )
Kylotan,

@ Kylotan i Durza007, jestem troszkę mało czasu, możesz edytować tę odpowiedź w razie potrzeby. Utworzono tę odpowiedź wiki wiki.
Klaim

Myślę, że ważne jest, aby powiedzieć, że dokumentacja msdn sugeruje użycie SHGetKnownFolderPath, ponieważ SHGetFolderPath jest tylko opakowaniem dla nowej metody i jest obsługiwana tylko dla kompatybilności wstecznej.
Kagemusha

16

System operacyjny Mac

Oparte na:

W systemie operacyjnym opartym na Uniksie ~katalog jest automatycznie zlokalizowany w katalogu osobistym użytkownika, w którym znajdują się dane specyficzne dla użytkownika. Oznacza to, że niezależnie od języka, na tych platformach można automatycznie uzyskać dostęp do tego folderu, używając ~zamiast funkcji specyficznej dla systemu operacyjnego. Należy również pamiętać, że /jest to ścieżka do katalogu głównego całego systemu, a nie ścieżka do katalogu głównego dysku głównego.

Dołącz własny katalog z nazwą gry lub firmą, a następnie nazwą gry do tych katalogów.


Dane gry gracza

Wytyczną Apple jest zlokalizowanie tam zapisywanych i konfigurowanych plików, aby były one automatycznie zapisywane w chmurze, jeśli są dostępne:

~ / Dokumenty

Jednak lepszą (i częściej stosowaną) praktyką jest zlokalizowanie tych plików w:

~ / Biblioteka / Obsługa aplikacji /

Po prostu wiedz, że w tym przypadku pliki nie zostaną automatycznie zapisane w chmurze. Jeśli chcesz, aby gracz wybrał, użyj interfejsu API platformy, aby go wybrać.

Udostępnione dane gry

/ Library / Application Support

Zauważ, że nie ma ~, nie jest to związane z domem użytkownika, ale z rootem systemu.

Tymczasowe dane gry:

Jeśli dane nie muszą być przechowywane między wykonaniami:

/ tmp

Jeśli dane muszą być przechowywane między egzekucjami;

/ Library / Caches (dla MacOSX)

C ++ użytkowników Boost : jest prosty cross-platform funkcja boost.filesystem tego

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

4
Nie wkładaj niczego ~/Documents. To użytkownik musi zorganizować; nigdy nie powinieneś pisać do stałej ścieżki w Dokumentach. Twoja gra powinna używać ~/Library/Application Support/Your App Name/do zapisywania i innych danych użytkownika.
Kevin Reid,

@KevinReid "Dokumenty, które użytkownik tworzy i widzi w interfejsie aplikacji - na przykład przeglądarki dokumentów w Pages, Numbers i Keynote powinny być przechowywane w katalogu Documents. Innym przykładem plików, które mogą przejść do katalogu Documents, są zapisane gry , ponownie, ponieważ są czymś, co aplikacja może potencjalnie udostępnić jako metodę wyboru ”. - Źródło: zalecenie Apple, w pierwszym łączu. Przegapiłem coś?
Klaim

2
We wszystkich tych przypadkach nacisk kładziony jest na wybór . Użytkownik wybiera, jak się nazywa i dokąd idzie. Pliki, którymi użytkownik nie zarządza, nie powinny być umieszczane w Dokumentach, ponieważ Dokumenty to przestrzeń nazw użytkownika, a nie programista. (Zastrzeżenie: Nie twierdzę, że moja rada jest zgodna z dokumentacją Apple. Twierdzę, że odzwierciedla ona większość praktyki wśród aplikacji zaprojektowanych dla komputerów Mac i że użytkownicy będą z niej zadowoleni.)
Kevin Reid

Ponadto nie było żadnych katalogów „Library” w wersjach wcześniejszych niż Mac OS. Uwagi „(OS X)” w połączonej dokumentacji kontrastują z iOS , co jest zupełnie innym pytaniem, ponieważ iOS nie ujawnia systemu plików użytkownikowi.
Kevin Reid,

@KevinReid Zaktualizuję zawartość biblioteki, dzięki. Jednak w przypadku tego, co mówisz o wyborze i dokumentach, wydaje się to sprzeczne. Zapisane gry są zależne od użytkownika, a nie od aplikacji lub programisty. Zależy to od gry, dlatego istnieje także wspólny katalog danych gry. Więc nie rozumiem dokładnie, co masz na myśli. Czy jest w tym coś racjonalnego?
Klaim

13

Debian Linux (Ubuntu, Fedora itp.)

Oparte na:

W systemie operacyjnym UNIX katalog ~ jest automatycznie zlokalizowany w katalogu osobistym użytkownika, w którym znajdują się dane specyficzne dla użytkownika. Oznacza to, że niezależnie od języka, na tych platformach można automatycznie uzyskać dostęp do tego folderu, używając ~ zamiast funkcji specyficznej dla systemu operacyjnego. Zauważ też, że / jest ścieżką katalogu głównego całego systemu, a nie ścieżką do katalogu głównego dysku głównego.

Dołącz własny katalog z nazwą gry lub firmą, a następnie nazwą gry do tych katalogów.


Dane gry gracza

Tradycyjnie dla gry Aquaria byłoby to:

~ / .aquaria

Pamiętaj, że katalogi i pliki zaczynające się od .będą domyślnie ukryte dla użytkownika.

Większość komputerów stacjonarnych próbuje teraz przestrzegać specyfikacji XDG , która zaleca

$ XDG_CONFIG_HOME / aquaria

lub

$ XDG_DATA_HOME / aquaria

zamiast tego do konfiguracji i zapisywania.

Jeśli $XDG_CONFIG_HOMEnie ustawione, użyj:

~ / .config / aquaria

lub

~ / .local / aquaria

Ma to głównie na celu uporządkowanie katalogu domowego użytkownika, a także umożliwienie użytkownikom uruchamiania wielu profili aplikacji, jeśli uznają to za konieczne. Istnieją również inne dedykowane katalogi specyficzne dla użytkownika w specyfikacji.

Udostępnione dane gry

/ var / games /

Udostępnione pliki konfiguracyjne powinny znajdować się w

/ etc / games /

Tymczasowe dane gry

/ tmp


1
Aby rozwinąć: gra „Aquaria” powinna umieścić swoje dane gry w ~ / .aquaria (lub ~ / .config / Aquaria). Marszczy brwi fakt, że ma katalog do zapisu w / var; Ogólnym sposobem, aby tak się stało, jest utworzenie konta użytkownika dla Twojej gry i uczynienie go jedynym kontem, które może zapisywać w tym katalogu (a następnie używać setuid, gdy normalni ludzie grają w grę). To może być więcej pracy niż chcesz.
dhasenan

Cóż, w rzeczywistości większość komputerów próbuje teraz zastosować się do specyfikacji XDG, która zaleca $ XDG_CONFIG_HOME / aquaria (lub ~ / .config / aquaria, jeśli nie jest ustawiony) i $ XDG_DATA_HOME / aquaria (lub ~ / .local / aquaria) do konfiguracji i zamiast tego savegames (patrz standard.freedesktop.org/basedir-spec/basedir-spec-latest.html ). Ma to głównie na celu uporządkowanie katalogu domowego użytkownika, a także umożliwienie użytkownikom uruchamiania wielu profili aplikacji, jeśli uznają to za konieczne. Istnieją również inne dedykowane katalogi specyficzne dla użytkownika w specyfikacji.
liori

@liori Zaktualizuję odpowiedzi jutro, jeśli będę mógł znaleźć czas, przepraszam za opóźnienie. Jeśli masz na to ochotę i masz czas, zaktualizuj informacje. Przydaje mi się również.
Klaim
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.