¿En qué directorio escribir juego guardar archivos / datos?

37

Necesito una lista definitiva de directorios, uno o más por plataforma, de dónde colocar los archivos guardados del juego y otros datos generados por el juego . Ya sea según la especificación del desarrollador del sistema operativo o porque es de uso común si no hay una recomendación.

Por favor proporcionar una respuesta por la plataforma , con diferentes directorios. Además, el ejemplo de cómo obtener la ubicación del directorio en C ++ o C es el mejor , ya que es el lenguaje que tendrá más dificultades.

Ubicaciones:

  • Datos del juego del jugador (juegos guardados, configuración).
  • Datos de juego compartidos (como puntaje alto o configuración para todos los usuarios de computadoras).
  • Datos temporales del juego (también conocido como directorio de caché).
Klaim
fuente
1
Probablemente debería poner todas las respuestas en una, ya que no hay una sola respuesta para aceptar.
Zolomon
@Zolomon El problema es que una respuesta con todas las plataformas será demasiado grande, creo. En particular si agrega plataformas móviles / tabletas ...
Klaim
Vale la pena señalar (ya que puede haber más personas que comparten esta opinión) que al menos odio cuando los juegos no se guardan en sus respetuosos directorios (de instalación). Me gustan los juegos en los que los usuarios dentro del juego se crean dentro del juego, y no es necesario esconderse más: las PC que uso para jugar nunca son lo suficientemente multiusuario como para usar los usuarios del sistema operativo. O si debe usarlo, me gustan los juegos que lo hacen internamente. Puede que no sea el caso, pero: la idea de un usuario del sistema operativo = una pieza del usuario del juego alterego también es angustiante. Tenga en cuenta que soy un jugador de Windows. en * unix es diferente, el FS fijo fuerza el concepto (no hay unidades)
n611x007
@naxa Si eso puede "consolarlo", estoy haciendo un juego que tiene una administración de cuenta de jugadores dentro, pero la cuenta de jugadores aún debe almacenarse en la cuenta del usuario por razones de seguridad del sistema operativo. También podría almacenarlos en un repositorio compartido, no estoy seguro. Además, tendré que permitir que los usuarios mantengan los datos en línea en algún momento.
Klaim
3
@naxa El problema es que en Vista, Windows7, Windows8, a menos que se ejecute específicamente como administrador, los programas no podrán escribir en Archivos de programa \ Game-Install-Dir \. Creo que esto también es cierto en las versiones más recientes de Linux y OSX.
Nate

Respuestas:

23

Windows (XP y siguientes)

Residencia en:

Estas ubicaciones suponen que Windows está instalado en el disco C:. Agregue su propio directorio con el nombre del juego o la compañía del juego y luego el nombre del juego a estos directorios.


Si usa la aplicación estilo Metro de Windows 8 , tendrá que usar una API específica en lugar de intentar llegar a los directorios. Leer:


Datos del juego del jugador

Windows Vista y siguientes:

C: \ Usuarios \ {nombre de usuario} \ AppData \ Roaming

Windows XP:

C: \ Documents and Settings \ {nombre de usuario} \ Datos de la aplicación

Puede obtener automáticamente la dirección correcta dependiente del nombre de usuario al obtener la APPDATAvariable de entorno .

Estándar C (todos los compiladores):

char* appdata = getenv("APPDATA");

Visual Studio 20xx ( evite la advertencia getenv () que dice que no es seguro ) - no Metro Style:

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

Usuarios de Boost : en el momento en que escribo este boost.filesystem (que también es un borrador de la biblioteca del sistema de archivos propuesto para el próximo estándar C ++) aún no implementa una función para proporcionar el directorio correcto. Sin embargo, ha habido discusiones sobre esto antes . No dude en actualizar esta sección si las cosas cambian.


Datos compartidos del juego

Windows Vista y siguientes:

C: \ ProgramData

Windows XP:

C: \ Documentos y configuraciones \ Todos los usuarios

Puede obtener automáticamente la dirección correcta al obtener la PROGRAMDATAvariable de entorno .

Estándar C (todos los compiladores):

char* appdata = getenv("PROGRAMDATA");

Visual Studio 20xx ( evite la advertencia getenv () que dice que no es seguro ) - no Metro Style:

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

Usuarios de Boost : en el momento en que escribo este boost.filesystem (que también es un borrador de la biblioteca del sistema de archivos propuesto para el próximo estándar C ++) aún no implementa una función para proporcionar el directorio correcto. Sin embargo, ha habido discusiones sobre esto antes . No dude en actualizar esta sección si las cosas cambian.


Datos temporales del juego

Windows Vista y siguientes:

C: \ ProgramData

Windows XP:

C: \ Documents and Settings \ {nombre de usuario} \ Configuración local \ Temp

Puede obtener automáticamente la dirección correcta al obtener la TEMPvariable de entorno .

Usuarios de C ++ Boost : hay una función simple de plataforma cruzada boost.filesystem para esto

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

Estándar C (todos los compiladores):

char* appdata = getenv("TEMP");

Visual Studio 20xx ( evite la advertencia getenv () que dice que no es seguro ) - no Metro Style:

char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "TEMP" ); 
Klaim
fuente
44
En Vista y versiones posteriores, las partidas guardadas deben colocarse preferiblemente en la carpeta especial "Partidas guardadas". Más información aquí: msdn.microsoft.com/en-us/library/windows/desktop/… Busque "FOLDERID_SavedGames"
Durza007
1
Nunca debería intentar adivinar el camino usted mismo o construirlo a partir de variables de entorno, realmente. En Vista y superior, debe llamar a SHGetKnownFolderPath ( msdn.microsoft.com/en-us/library/bb762188.aspx ) y en XP y a continuación use SHGetFolderPath ( msdn.microsoft.com/en-us/library/bb762181.aspx )
Kylotan
@Kylotan y Durza007, tengo poco tiempo, no dudes en editar esta respuesta según sea necesario. Hizo esta respuesta wiki de la comunidad.
Klaim
Creo que es importante decir que la documentación de msdn sugiere usar SHGetKnownFolderPath ya que SHGetFolderPath es solo un contenedor para el nuevo método y solo es compatible con la compatibilidad con versiones anteriores.
Kagemusha
16

Mac OS

Residencia en:

En el sistema operativo basado en Unix, el ~directorio se ubica automáticamente en el directorio de inicio del usuario donde se encuentran los datos específicos del usuario. Esto significa que, sea cual sea el idioma, en estas plataformas puede acceder automáticamente a esta carpeta mediante el uso ~de una función específica del sistema operativo. También tenga en cuenta que /es la ruta raíz de todo el sistema, no una ruta a la raíz del disco principal.

Agregue su propio directorio con el nombre del juego o la compañía del juego y luego el nombre del juego a estos directorios.


Datos del juego del jugador

La guía de Apple es ubicar los archivos de guardar y configurar allí para que se guarden automáticamente en la nube si están disponibles:

~ / Documentos

Sin embargo, es mejor (y se usa con mayor frecuencia) localizar estos archivos en:

~ / Biblioteca / Soporte de aplicaciones /

Solo sepa que en este caso los archivos no se guardarán automáticamente en la nube. Si quieres que el jugador elija, usa la API de la plataforma para que elija.

Datos compartidos del juego

/ Biblioteca / Soporte de aplicaciones

Tenga en cuenta que no existe ~, no es relativo al hogar del usuario sino a la raíz del sistema.

Datos temporales del juego:

Si no es necesario mantener los datos entre ejecuciones:

/ tmp

Si los datos deben mantenerse entre ejecuciones;

/ Library / Caches (para MacOSX)

Usuarios de C ++ Boost : hay una función simple de plataforma cruzada boost.filesystem para esto

namespace bfs = boost::filesystem;
const bfs::path TEMP_DIR = bfs::system_complete( bfs::temp_directory_path() ); // system_complete() call is optional
revs Klaim
fuente
44
No coloque nada en~/Documents . Eso es para que el usuario elija organizar; nunca debe escribir en una ruta fija dentro de Documentos. Tu juego debe usarse ~/Library/Application Support/Your App Name/para guardar y otros datos del usuario.
Kevin Reid
@KevinReid "Los documentos que el usuario crea y ve en la interfaz de usuario de una aplicación; por ejemplo, los navegadores de documentos en Páginas, Números y Keynote deben almacenarse en el directorio Documentos. Otro ejemplo de archivos que pueden ir en el directorio Documentos son juegos guardados , de nuevo porque son algo que una aplicación podría proporcionar algún tipo de método para seleccionar ". - Fuente: recomendación de Apple, en el primer enlace. ¿Me he perdido algo?
Klaim
2
En todos ellos, el énfasis está en la selección . El usuario elige cómo se nombran y a dónde van. Los archivos que el usuario no administra no deben colocarse en Documentos, porque Documentos es el espacio de nombres del usuario, no el desarrollador. (Descargo de responsabilidad: no afirmo que mi consejo esté alineado con la documentación de Apple. Afirmo que refleja la mayoría de la práctica entre las aplicaciones diseñadas para Mac y que los usuarios estarán más felices con ella)
Kevin Reid,
Además, no había directorios de "Biblioteca" en Mac OS anterior a X. Las observaciones de "(OS X)" en la documentación vinculada contrastan con iOS , que es una pregunta completamente diferente ya que iOS no expone un sistema de archivos al usuario.
Kevin Reid
@KevinReid Actualizaré las cosas de la Biblioteca, gracias. Sin embargo, por lo que dice sobre la selección y Documentos, esto parece contradictorio. Los juegos guardados son relativos al usuario, no relativos a la aplicación o al desarrollador. Bueno, depende del juego, por lo que también hay un directorio compartido de datos del juego. Entonces no entiendo lo que quieres decir exactamente. ¿Hay algo racional en alguna parte sobre eso?
Klaim
13

Linux Debian (Ubuntu, Fedora, etc.)

Residencia en:

En el sistema operativo basado en Unix, el directorio ~ se ubica automáticamente en el directorio de inicio del usuario donde se encuentran los datos específicos del usuario. Esto significa que, sea cual sea el idioma, en estas plataformas puede acceder automáticamente a esta carpeta utilizando ~ en lugar de utilizar una función específica del sistema operativo. También tenga en cuenta que / es la ruta raíz de todo el sistema, no una ruta a la raíz del disco principal.

Agregue su propio directorio con el nombre del juego o la compañía del juego y luego el nombre del juego a estos directorios.


Datos del juego del jugador

Tradicionalmente, para el juego Aquaria sería:

~ / .aquaria

Tenga en cuenta que los directorios y archivos que comiencen .estarán ocultos por defecto para el usuario.

La mayoría de las computadoras de escritorio ahora intentan cumplir con la especificación XDG , que recomienda

$ XDG_CONFIG_HOME / acuarios

o

$ XDG_DATA_HOME / acuarios

para configuración y juegos guardados en su lugar.

Si $XDG_CONFIG_HOMEno se establece el uso:

~ / .config / aquaria

o

~ / .local / aquaria

Esto es principalmente para ordenar el directorio de inicio del usuario, así como para permitir a los usuarios ejecutar múltiples perfiles de una aplicación si lo consideran necesario. También hay otros directorios dedicados específicos de usuario en la especificación.

Datos compartidos del juego

/ var / games /

Los archivos de configuración compartidos deben ubicarse en

/ etc / games /

Datos temporales del juego

/ tmp

revs Klaim
fuente
1
Para elaborar: un juego "Aquaria" debe poner sus datos del juego en ~ / .aquaria (o ~ / .config / Aquaria). Está mal visto tener un directorio de escritura mundial en / var; La forma general de lograrlo es crear una cuenta de usuario para su juego y convertirla en la única cuenta que puede escribir en ese directorio (y luego usar setuid cuando la gente normal está jugando). Esto podría ser más trabajo de lo que quieres.
dhasenan
Bueno, en realidad, la mayoría de los escritorios ahora intentan adherirse a la especificación XDG, que recomienda $ XDG_CONFIG_HOME / aquaria (o ~ / .config / aquaria si no está configurado) y $ XDG_DATA_HOME / aquaria (o ~ / .local / aquaria) para la configuración y savegames en su lugar (ver standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ). Esto es principalmente para ordenar el directorio de inicio del usuario, así como para permitir a los usuarios ejecutar múltiples perfiles de una aplicación si lo consideran necesario. También hay otros directorios dedicados específicos de usuario en la especificación.
liori
@liori Actualizaré las respuestas mañana si encuentro tiempo, perdón por la demora. Si lo desea y tiene tiempo, no dude en actualizar la información. También me es útil.
Klaim