In quale directory per scrivere il gioco salvare file / dati?


37

Ho bisogno di un elenco definito di directory, una o più per piattaforma, in cui inserire i file di salvataggio del gioco e altri dati generati dal gioco . O basato sulle specifiche dello sviluppatore del sistema operativo o perché è un uso comune se non ci sono raccomandazioni.

Fornisci una risposta per piattaforma , con directory diverse. Inoltre, l' esempio di come ottenere la posizione della directory in C ++ o C è la cosa migliore , poiché è la lingua che avrai più difficoltà.

sedi:

  • Dati di gioco del giocatore (partite salvate, configurazione).
  • Dati di gioco condivisi (come punteggio elevato o configurazione per tutti gli utenti di computer).
  • Dati di gioco temporanei (aka directory cache).

1
Probabilmente dovresti mettere tutte le risposte in una, dal momento che non esiste un'unica risposta da accettare?
Zolomon,

@Zolomon Il problema è che una risposta con tutte le piattaforme sarà troppo grande, credo. In particolare se aggiungi piattaforme mobili / tablet ...
Klaim

potrebbe valere la pena notare (poiché potrebbero esserci più persone che condividono questa opinione) che almeno odio quando i giochi non salvano nelle rispettive directory (di installazione). Mi piacciono i giochi in cui gli utenti in-game vengono creati in-game, e non è più necessario nascondersi: i PC che utilizzo per i giochi non sono mai abbastanza multi-utente per utilizzare gli utenti del sistema operativo. O se deve usarlo, mi piacciono i giochi che lo fanno internamente. Potrebbe non essere il caso, ma: l'idea di un utente del sistema operativo = un altro pezzo di gioco alterego è anche angosciante. nota che sono un giocatore di Windows. on * unix è diverso, l'FS fisso forza il concetto (non ci sono unità)
n611x007

@naxa Se questo può "consolarti", sto realizzando un gioco con una gestione dell'account dei giocatori all'interno, ma l'account dei giocatori deve ancora essere archiviato nell'account dell'utente per motivi di sicurezza del sistema operativo. Potrei memorizzarli anche in repository condivisi, non sono sicuro. Inoltre, dovrò consentire agli utenti di conservare i dati online a un certo punto.
Klaim

3
@naxa Il problema è che su Vista, Windows7, Windows8, a meno che non vengano eseguiti specificatamente come amministratore, i programmi non saranno in grado di scrivere su Programmi \ Game-Install-Dir \. Credo che ciò valga anche per le versioni più recenti di Linux e OSX.
Nate,

Risposte:


23

Windows (XP e seguenti)

Basato su:

Queste posizioni presuppongono che Windows sia installato sul disco C :. Aggiungi la tua directory con il nome del gioco o la società del gioco, quindi il nome del gioco a queste directory.


Se usi un'applicazione Windows 8 in stile Metro , dovrai usare un'API specifica invece di provare a raggiungere le directory. Leggere:


Dati di gioco del giocatore

Windows Vista e seguenti:

C: \ Utenti \ nomeutente {} \ AppData \ Roaming

Windows XP:

C: \ Documents and Settings \ {nome utente} \ Dati applicazioni

È possibile ottenere automaticamente l'indirizzo dipendente dal nome utente corretto ottenendo la APPDATAvariabile di ambiente .

Standard C (tutti i compilatori):

char* appdata = getenv("APPDATA");

Visual Studio 20xx ( evitare l'avvertimento di getenv () dicendo che non è sicuro ) - non Metro Style:

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

Incentivare gli utenti : al momento scrivo questo boost.filesystem (che è anche una bozza della libreria di filesystem proposta al prossimo standard C ++) non implementa ancora una funzione per fornire la directory giusta. Tuttavia, ci sono state discussioni su questo prima . Sentiti libero di aggiornare questa sezione se le cose sono cambiate.


Dati di gioco condivisi

Windows Vista e seguenti:

C: \ ProgramData

Windows XP:

C: \ Documents and Settings \ Tutti gli utenti

Puoi ottenere automaticamente l'indirizzo giusto ottenendo la PROGRAMDATAvariabile d'ambiente .

Standard C (tutti i compilatori):

char* appdata = getenv("PROGRAMDATA");

Visual Studio 20xx ( evitare l'avvertimento di getenv () dicendo che non è sicuro ) - non Metro Style:

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

Incentivare gli utenti : al momento scrivo questo boost.filesystem (che è anche una bozza della libreria di filesystem proposta al prossimo standard C ++) non implementa ancora una funzione per fornire la directory giusta. Tuttavia, ci sono state discussioni su questo prima . Sentiti libero di aggiornare questa sezione se le cose sono cambiate.


Dati di gioco temporanei

Windows Vista e seguenti:

C: \ ProgramData

Windows XP:

C: \ Documents and Settings \ {nome utente} \ Impostazioni locali \ Temp

Puoi ottenere automaticamente l'indirizzo giusto ottenendo la TEMPvariabile d'ambiente .

C ++ Potenzia gli utenti : esiste una semplice funzione boost.filesystem multipiattaforma per questo

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

Standard C (tutti i compilatori):

char* appdata = getenv("TEMP");

Visual Studio 20xx ( evitare l'avvertimento di getenv () dicendo che non è sicuro ) - non Metro Style:

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

4
Su Vista e versioni successive, è preferibile posizionare i salvataggi nella speciale cartella "Giochi salvati". Maggiori informazioni qui: msdn.microsoft.com/en-us/library/windows/desktop/… Cerca "FOLDERID_SavedGames"
Durza007

1
Non dovresti mai provare a indovinare tu stesso il percorso o costruirlo dalle variabili di ambiente, davvero. Su Vista e sopra, si dovrebbe chiamare SHGetKnownFolderPath ( msdn.microsoft.com/en-us/library/bb762188.aspx ) e su XP e sotto l'uso SHGetFolderPath ( msdn.microsoft.com/en-us/library/bb762181.aspx )
Kylotan,

@Kylotan e Durza007, sono un po 'a corto di tempo, sentiti libero di modificare questa risposta se necessario. Creato questa risposta wiki della community.
Klaim,

Penso che sia importante dire che la documentazione di msdn suggerisce di usare SHGetKnownFolderPath poiché SHGetFolderPath è solo un wrapper per il nuovo metodo ed è supportato solo per la compatibilità con le versioni precedenti.
Kagemusha,

16

Mac OS

Basato su:

Nel sistema operativo basato su unix, la ~directory si trova automaticamente nella home directory dell'utente in cui si trovano i dati specifici dell'utente. Ciò significa che, indipendentemente dalla lingua, su queste piattaforme è possibile accedere automaticamente a questa cartella utilizzando ~anziché utilizzare una funzione specifica del sistema operativo. Si noti inoltre che /è il percorso principale dell'intero sistema, non un percorso verso la radice del disco principale.

Aggiungi la tua directory con il nome del gioco o la società del gioco, quindi il nome del gioco a queste directory.


Dati di gioco del giocatore

La linea guida di Apple è quella di individuare i file di salvataggio e configurazione lì per renderli salvati automaticamente nel cloud, se disponibili:

~ / Documenti

Tuttavia, è meglio (e più spesso usato) individuare questi file in:

~ / Libreria / Supporto applicazioni /

Basta sapere che in questo caso i file non verranno salvati automaticamente nel cloud. Se vuoi che il giocatore scelga, usa l'API della piattaforma per farlo scegliere.

Dati di gioco condivisi

/ Libreria / Supporto applicazioni

Si noti che non c'è ~, non è relativo alla casa dell'utente ma alla radice del sistema.

Dati di gioco temporanei:

Se non è necessario conservare i dati tra le esecuzioni:

/ tmp

Se i dati devono essere conservati tra le esecuzioni;

/ Libreria / Cache (per MacOSX)

C ++ Potenzia gli utenti : esiste una semplice funzione boost.filesystem multipiattaforma per questo

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

4
Non mettere nulla dentro ~/Documents. Questo è per l'utente di scegliere di organizzare; non dovresti mai scrivere su un percorso fisso all'interno di Documents. Il gioco dovrebbe essere utilizzato ~/Library/Application Support/Your App Name/per salvare e altri dati utente.
Kevin Reid,

@KevinReid "I documenti che l'utente crea e vede nell'interfaccia utente di un'app, ad esempio i browser di documenti in Pages, Numbers e Keynote dovrebbero essere archiviati nella directory Documents. Un altro esempio di file che potrebbe andare nella directory Documents sono i giochi salvati , ancora una volta perché sono qualcosa che un'app potrebbe potenzialmente fornire una sorta di metodo per la selezione. " - Fonte: raccomandazione di Apple, nel primo link. Ho dimenticato qualcosa?
Klaim

2
In tutti questi l'enfasi è sulla selezione . L'utente sceglie il nome e la destinazione. I file che l'utente non gestisce non devono essere inseriti in Documents, poiché Documents è lo spazio dei nomi dell'utente, non lo sviluppatore. (Dichiarazione di non responsabilità: non dichiaro che il mio consiglio sia in linea con la documentazione di Apple. Dichiaro che rifletta la maggior parte delle pratiche tra le applicazioni progettate per Mac e che gli utenti ne saranno più felici.)
Kevin Reid

Inoltre, non c'erano directory "Library" su Mac OS pre-X. Le osservazioni “(OS X)” nella documentazione collegata sono in contrasto con iOS , che è una domanda completamente diversa poiché iOS non espone un filesystem all'utente.
Kevin Reid,

@KevinReid Aggiornerò le cose della Biblioteca, grazie. Tuttavia, per quello che dici sulla selezione e sui documenti, questo sembra contraddittorio. I salvataggi sono relativi all'utente, non all'applicazione o allo sviluppatore. Bene dipende dal gioco, motivo per cui esiste anche una directory di dati di gioco condivisa. Quindi non capisco cosa intendi esattamente. C'è qualche razionale da qualche parte in merito?
Klaim,

13

Linux Debian (Ubuntu, Fedora, ecc.)

Basato su:

Nel sistema operativo basato su unix, la directory ~ si trova automaticamente nella home directory dell'utente in cui si trovano i dati specifici dell'utente. Ciò significa che, indipendentemente dalla lingua, su queste piattaforme è possibile accedere automaticamente a questa cartella utilizzando ~ invece di utilizzare una funzione specifica del sistema operativo. Si noti inoltre che / è il percorso principale dell'intero sistema, non un percorso verso la radice del disco principale.

Aggiungi la tua directory con il nome del gioco o la società del gioco, quindi il nome del gioco a queste directory.


Dati di gioco del giocatore

Tradizionalmente, per il gioco Aquaria sarebbe:

~ / .Aquaria

Si noti che le directory e i file che iniziano con .saranno nascosti per impostazione predefinita all'utente.

La maggior parte dei desktop ora tenta di aderire alla specifica XDG , che raccomanda

$ XDG_CONFIG_HOME / acquari

o

$ XDG_DATA_HOME / acquari

per configurazione e savegame invece.

Se $XDG_CONFIG_HOMEnon impostato usare:

~ / .Config / acquari

o

~ / .Local / acquari

Ciò serve principalmente a disordinare la home directory dell'utente, nonché consentire agli utenti di eseguire più profili di un'applicazione se lo ritengono necessario. Ci sono anche altre directory specifiche dell'utente specifiche nella specifica.

Dati di gioco condivisi

/ Var / giochi /

I file di configurazione condivisi devono trovarsi in

/ Etc / giochi /

Dati di gioco temporanei

/ tmp


1
Per elaborare: un gioco "Aquaria" dovrebbe inserire i suoi dati di gioco in ~ / .aquaria (o ~ / .config / Aquaria). È malvisto per avere una directory scrivibile dal mondo in / var; il modo generale per farlo è creare un account utente per il tuo gioco e renderlo l'unico account in grado di scrivere in quella directory (e quindi usare setuid quando le persone normali stanno giocando). Questo potrebbe essere più lavoro di quello che vuoi.
dhasenan,

Bene, in realtà, la maggior parte dei desktop ora tenta di aderire alla specifica XDG, che consiglia $ XDG_CONFIG_HOME / aquaria (o ~ / .config / aquaria se non impostato) e $ XDG_DATA_HOME / aquaria (o ~ / .local / aquaria) per la configurazione e savegames invece (vedi standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ). Ciò serve principalmente a disordinare la home directory dell'utente, nonché consentire agli utenti di eseguire più profili di un'applicazione se lo ritengono necessario. Ci sono anche altre directory specifiche dell'utente specifiche nella specifica.
liori,

@liori domani aggiornerò le risposte se riesco a trovare il tempo, scusate il ritardo. Se ne hai voglia e hai tempo, non esitare ad aggiornare le informazioni. È utile anche a me.
Klaim
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.