게임 저장 파일 / 데이터를 작성할 디렉토리는 무엇입니까?


37

게임 저장 파일 및 기타 게임 생성 데이터를 넣을 위치에 대한 디렉토리 목록 (플랫폼 당 하나 이상)이 필요합니다 . OS 개발자 사양을 기반으로하거나 권장 사항이없는 경우 일반적으로 사용되기 때문입니다.

플랫폼마다 하나의 답변 을 다른 디렉토리와 함께 제공 하십시오 . 또한 C ++ 또는 C에서 디렉토리 위치를 얻는 방법의 예는 가장 어려운 언어 이므로 가장 좋습니다 .

위치 :

  • 플레이어의 게임 데이터 (저장된 게임, 구성).
  • 공유 게임 데이터 (모든 컴퓨터 사용자를위한 최고 점수 또는 구성)
  • 임시 게임 데이터 (일명 캐시 디렉토리).

1
수락 할 단일 답변이 없기 때문에 모든 답변을 하나로 묶어야합니까?
Zolomon

@ Zolomon 문제는 모든 플랫폼에 대한 하나의 대답이 너무 크다는 것입니다. 특히 모바일 / 태블릿 플랫폼을 추가하는 경우 ...
Klaim

게임이 그들의 존경받는 (설치) 디렉토리에 저장되지 않을 때 나는 싫어한다는 점에 주목할 가치가 있습니다 (이 의견을 공유하는 사람이 더 많을 수 있기 때문에). 게임 내 사용자가 게임 내에서 생성되는 게임을 좋아하고 더 이상 숨길 필요가 없습니다. 게임에 사용하는 PC는 OS 사용자를 전혀 사용할 수있는 다중 사용자가 아닙니다. 또는 그것을 사용해야한다면 내부적으로하는 게임을 좋아합니다. 그렇지 않을 수도 있지만, 한 명의 OS 사용자에 대한 아이디어 = 한 명의 게임 사용자 alterego도 고민입니다. 참고 Windows 게이머입니다. * 유닉스에서는 다릅니다. 고정 FS는 개념을 강제합니다 (드라이브는 없습니다)
n611x007

@naxa 만약 그것이 당신을 "위안"시킬 수 있다면, 나는 플레이어 계정 관리를 가지고있는 게임을 만들고 있지만 OS 보안상의 이유로 플레이어 계정은 여전히 ​​사용자의 계정에 저장되어야합니다. 공유 저장소에 저장할 수도 있습니다. 또한 사용자가 어느 시점에서 온라인으로 데이터를 유지할 수 있도록해야합니다.
Klaim

3
@naxa 문제는 특별히 관리자 권한으로 실행하지 않으면 Vista, Windows7, Windows8에서 프로그램이 Program Files \ Game-Install-Dir \에 쓸 수 없다는 것입니다. 최신 Linux 및 OSX 버전에서도 마찬가지입니다.
Nate

답변:


23

Windows (Xp 이하)

기준 :

이 위치에서는 Windows가 C : 디스크에 설치되어 있다고 가정합니다. 게임 이름 또는 게임 회사와 함께 자신의 디렉토리를 추가 한 다음 게임 이름을이 디렉토리에 추가하십시오.


Window 8 Metro 스타일 응용 프로그램 을 사용하는 경우 디렉토리에 접근하는 대신 특정 API를 사용해야합니다. 읽다:


플레이어의 게임 데이터

Windows Vista 및 다음 :

C : \ Users \ {사용자 이름} \ AppData \ Roaming

윈도우 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

윈도우 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

윈도우 XP:

C : \ Documents and Settings \ {사용자 이름} \ Local Settings \ Temp

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 이상에서는 SHGetKnownFolderPath ( msdn.microsoft.com/en-us/library/bb762188.aspx )를 호출 하고 XP 이하에서는 SHGetFolderPath ( msdn.microsoft.com/en-us/library/bb762181.aspx )를 사용해야합니다.
Kylotan

@Kylotan과 Durza007, 시간이 조금 부족합니다. 필요에 따라이 답변을 자유롭게 편집하십시오. 이 답변을 커뮤니티 위키로 만들었습니다.
클라 임

SHGetFolderPath는 새 메서드의 래퍼 일 뿐이며 이전 버전과의 호환성을 위해서만 지원되므로 msdn 설명서에서 SHGetKnownFolderPath 사용을 제안한다고 말하는 것이 중요하다고 생각합니다.
Kagemusha

16

맥 OS

기준 :

유닉스 기반 OS에서 ~디렉토리는 자동으로 사용자 별 데이터가있는 사용자의 홈 디렉토리에 있습니다. 즉, 이러한 플랫폼에서 언어에 관계없이 ~OS 별 기능을 사용하는 대신 이 폴더에 자동으로 액세스 할 수 있습니다 . 또한 /주 디스크의 루트에 대한 경로가 아니라 전체 시스템의 루트 경로입니다.

게임 이름 또는 게임 회사와 함께 자신의 디렉토리를 추가 한 다음 게임 이름을이 디렉토리에 추가하십시오.


플레이어의 게임 데이터

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/저장 및 기타 사용자 데이터에 사용해야 합니다.
Kevin Reid

@KevinReid "사용자가 앱의 사용자 인터페이스에서 만들고보고있는 문서 (예 : Pages, Numbers 및 Keynote의 문서 브라우저는 Documents 디렉토리에 저장해야합니다. Documents 디렉토리에있을 수있는 파일의 다른 예는 게임 저장) 앱이 선택을위한 일종의 방법을 제공 할 수 있기 때문입니다. " -출처 : 첫 번째 링크에서 Apple의 권장 사항. 내가 뭘 놓 쳤니?
클라 임

2
이 모든 것을 강조하는 것은을 선택하는 것 입니다. 사용자는 자신의 이름과 장소를 선택합니다. 문서는 개발자가 아닌 사용자의 네임 스페이스이므로 사용자가 관리하지 않는 파일은 문서에 배치해서는 안됩니다. (면책 조항 : 본인의 조언이 Apple의 문서와 일치한다고 주장하지 않습니다.이 내용은 Mac 용으로 설계된 응용 프로그램 중 대부분의 사례를 반영하며 사용자가 더 행복 할 것이라고 주장합니다.)
Kevin Reid

또한 X 이전 Mac OS에는 "라이브러리"디렉토리가 없었습니다. 링크 된 문서의 "(OS X)"설명은 iOS 와 대조적입니다. iOS 는 파일 시스템을 사용자에게 노출시키지 않기 때문에 완전히 다른 질문입니다.
Kevin Reid

@KevinReid 감사합니다. 라이브러리를 업데이트하겠습니다. 그러나 선택 및 문서에 대해 말한 내용과 모순되는 것처럼 보입니다. 저장 게임은 응용 프로그램이나 개발자가 아닌 사용자 기준입니다. 게임에 따라 다르므로 공유 게임 데이터 디렉토리도 있습니다. 그래서 나는 당신이 정확히 무엇을 의미하는지 이해하지 못합니다. 어딘가에 합리적이 있습니까?
클라 임

13

리눅스 데비안 (우분투, 페도라 등)

기준 :

유닉스 기반 OS에서 ~ 디렉토리는 사용자 별 데이터가있는 사용자의 홈 디렉토리에 자동으로 위치합니다. 즉, 이러한 플랫폼에서 언어에 상관없이 OS 별 기능 대신 ~를 사용하여이 폴더에 자동으로 액세스 할 수 있습니다. 또한 /는 주 디스크의 루트 경로가 아니라 전체 시스템의 루트 경로입니다.

게임 이름 또는 게임 회사와 함께 자신의 디렉토리를 추가 한 다음 게임 이름을이 디렉토리에 추가하십시오.


플레이어의 게임 데이터

전통적으로 Aquaria 게임의 경우 다음과 같습니다.

~ / .aquaria

로 시작하는 디렉토리 및 파일 .은 기본적으로 사용자에게 숨겨집니다.

대부분의 데스크톱은 이제 XDG 사양 을 준수하려고 합니다.

$ XDG_CONFIG_HOME / 수족관

또는

$ XDG_DATA_HOME / 수족관

대신 구성 및 저장 게임.

설정 $XDG_CONFIG_HOME하지 않은 경우 :

~ / .config / aquaria

또는

~ / .local / aquaria

이것은 대부분 사용자의 홈 디렉토리를 정리하고 필요한 경우 응용 프로그램의 여러 프로파일을 실행할 수 있도록합니다. 사양에는 다른 전용 사용자 별 디렉토리도 있습니다.

공유 게임 데이터

/ var / games /

공유 구성 파일은

/ etc / games /

임시 게임 데이터

/ tmp


1
자세히 설명하자면, 게임 "Aquaria"는 게임 데이터를 ~ / .aquaria (또는 ~ / .config / Aquaria)에 넣어야합니다. / var에 세계 쓰기 가능한 디렉토리를 갖기 위해 눈살을 찌푸 렸습니다. 그렇게하는 일반적인 방법은 게임의 사용자 계정을 만들어 해당 디렉토리에 쓸 수있는 유일한 계정으로 만드는 것입니다 (그리고 일반 사람들이 게임을 할 때 setuid를 사용하는 것). 이것은 당신이 원하는 것보다 더 많은 일이 될 수 있습니다.
dhasenan

실제로 대부분의 데스크톱은 이제 XDG 사양을 준수하려고 시도합니다. 이는 XDG_CONFIG_HOME / aquaria (또는 설정되지 않은 경우 ~ / .config / aquaria) 및 $ XDG_DATA_HOME / aquaria (또는 ~ / .local / aquaria)를 권장합니다. 대신 게임을 저장하십시오 ( standards.freedesktop.org/basedir-spec/basedir-spec-latest.html 참조 ). 이것은 대부분 사용자의 홈 디렉토리를 정리하고 필요한 경우 응용 프로그램의 여러 프로파일을 실행할 수 있도록합니다. 사양에는 다른 전용 사용자 별 디렉토리도 있습니다.
liori

@liori 시간을 찾을 수 있다면 내일 답변을 업데이트하겠습니다. 지연되어 죄송합니다. 마음에 드시고 시간이 있으시면 언제든지 정보를 업데이트하십시오. 나에게도 유용합니다.
Klaim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.