खेल को लिखने के लिए किस डायरेक्टरी में फाइल / डाटा सेव करें?


37

मुझे निर्देशिकाओं की एक निश्चित सूची की आवश्यकता है , एक या एक से अधिक प्लेटफॉर्म, जहां गेम सेव फाइल्स और अन्य गेम जेनरेट किए गए डेटा को डालना है । या तो ओएस डेवलपर विनिर्देश पर आधारित है, या क्योंकि यह आम उपयोग है अगर कोई सिफारिश नहीं है।

कृपया अलग-अलग निर्देशिकाओं के साथ प्रति प्लेटफ़ॉर्म एक उत्तर प्रदान करें । साथ ही, C ++ या C में डायरेक्टरी लोकेशन कैसे प्राप्त करें , इसका उदाहरण सबसे अच्छा है , क्योंकि यह वह भाषा है जिसमें आपके पास अधिक कठिन समय होगा।

स्थान:

  • प्लेयर का गेम डेटा (सहेजे गए गेम, कॉन्फिग)।
  • साझा गेम डेटा (जैसे सभी कंप्यूटर उपयोगकर्ताओं के लिए उच्च-स्कोर या कॉन्फ़िगरेशन)।
  • अस्थायी खेल डेटा (उर्फ कैश डायरेक्टरी)।

1
आपको शायद सभी उत्तर एक में डाल देने चाहिए, क्योंकि स्वीकार करने के लिए एक भी उत्तर नहीं है?
ज़ोलोमन

@Zolomon समस्या यह है कि सभी प्लेटफार्मों के साथ एक जवाब बहुत बड़ा हो जाएगा जो मुझे लगता है। विशेष रूप से यदि आप मोबाइल / टैबलेट प्लेटफॉर्म को जोड़ते हैं ...
स्लेम

यह ध्यान देने योग्य हो सकता है (क्योंकि इस राय को साझा करने वाले अधिक हो सकते हैं) कि कम से कम मुझे नफरत है जब खेल उनके सम्मानजनक (इंस्टॉल) निर्देशिकाओं में नहीं बचाता है। मुझे ऐसे गेम पसंद हैं, जहाँ इन-गेम यूज़र्स इन-गेम बनाए जाते हैं, और अधिक छिपाना ज़रूरी नहीं है: गेमिंग के लिए मैं जिन पीसी का उपयोग करता हूं, वे कभी भी मल्टी-यूज़र नहीं होते हैं जो ओएस उपयोगकर्ताओं का उपयोग करने के लिए पर्याप्त नहीं होते हैं। या अगर इसका उपयोग करना चाहिए, तो मुझे ऐसे खेल पसंद हैं जो इसे आंतरिक रूप से करते हैं। मामला नहीं हो सकता है, लेकिन: एक ओएस उपयोगकर्ता का विचार = गेम उपयोगकर्ता परिवर्तन का एक टुकड़ा भी परेशान है। नोट मैं एक विंडोज़ गेमर हूं। * यूनिक्स पर यह अलग है, फिक्स्ड एफएस अवधारणा को बल देता है (कोई ड्राइव नहीं हैं)
n611x007

@naxa यदि वह आपको "सांत्वना" दे सकता है, तो मैं एक ऐसा गेम बना रहा हूं जिसमें खिलाड़ियों का खाता प्रबंधन है, लेकिन खिलाड़ियों के खाते को अभी भी ओएस सुरक्षा कारणों से उपयोगकर्ता के खाते में संग्रहीत किया जाना है। मैं उन्हें साझा रेपो में भी संग्रहीत कर सकता हूं, निश्चित नहीं। इसके अलावा, मुझे उपयोगकर्ताओं को किसी बिंदु पर डेटा ऑनलाइन रखने की अनुमति देने की आवश्यकता होगी।
स्लेम

3
@naxa समस्या यह है कि विस्टा, विंडोज 7, विंडोज 8 पर, जब तक कि विशेष रूप से प्रशासक के रूप में नहीं चलाया जाता है, तब तक प्रोग्राम्स प्रोग्राम्स \ गेम-इंस्टाल-डीआरआर पर लिखने में सक्षम नहीं होंगे। मेरा मानना ​​है कि यह हाल ही के लिनक्स और OSX संस्करणों पर भी लागू होता है।
नैट

जवाबों:


23

विंडोज (Xp और निम्नलिखित)

पर आधारित:

ये स्थान मानते हैं कि Windows C: डिस्क पर स्थापित है। खेल निर्देशिका या खेल कंपनी के साथ अपनी खुद की निर्देशिका को फिर इन निर्देशिकाओं को खेल का नाम दें।


यदि आप विंडो 8 मेट्रो-शैली एप्लिकेशन का उपयोग करते हैं, तो आपको निर्देशिकाओं तक पहुंचने की कोशिश करने के बजाय एक विशिष्ट एपीआई का उपयोग करना होगा। पढ़ें:


खिलाड़ी का खेल डेटा

Windows Vista और निम्नलिखित:

C: \ Users \ {username} \ AppData \ रोमिंग

विंडोज एक्स पी:

C: \ Documents and Settings \ {username} \ Application Data

आप APPDATAपर्यावरण चर प्राप्त करके स्वचालित रूप से सही उपयोगकर्ता-नाम-आश्रित पता प्राप्त कर सकते हैं

मानक सी (सभी संकलक):

char* appdata = getenv("APPDATA");

विजुअल स्टूडियो 20xx ( गेटेनव से बचें) यह कहते हुए चेतावनी देना कि यह सुरक्षित नहीं है - नॉन मेट्रो स्टाइल:

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

उपयोगकर्ताओं को बूस्ट करें : इस समय मैं यह बूस्ट लिखता हूं। फाइलसिस्टम (जो कि अगले सी ++ मानक के लिए प्रस्तावित फाइल सिस्टम लाइब्रेरी का एक मसौदा भी है) सही निर्देशिका प्रदान करने के लिए अभी तक एक फ़ंक्शन को लागू नहीं करता है। हालांकि, इस बारे में पहले भी चर्चा हुई है । यदि चीजें बदलीं तो कृपया इस अनुभाग को अपडेट करने के लिए स्वतंत्र महसूस करें।


साझा किया गया गेम डेटा

Windows Vista और निम्नलिखित:

C: \ ProgramData

विंडोज एक्स पी:

C: \ Documents और Settings \ All उपयोगकर्ता

आप PROGRAMDATAपर्यावरण चर प्राप्त करके स्वचालित रूप से सही पता प्राप्त कर सकते हैं ।

मानक सी (सभी संकलक):

char* appdata = getenv("PROGRAMDATA");

विजुअल स्टूडियो 20xx ( गेटेनव से बचें) यह कहते हुए चेतावनी देना कि यह सुरक्षित नहीं है - नॉन मेट्रो स्टाइल:

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

उपयोगकर्ताओं को बूस्ट करें : इस समय मैं यह बूस्ट लिखता हूं। फाइलसिस्टम (जो कि अगले सी ++ मानक के लिए प्रस्तावित फाइल सिस्टम लाइब्रेरी का एक मसौदा भी है) सही निर्देशिका प्रदान करने के लिए अभी तक एक फ़ंक्शन को लागू नहीं करता है। हालांकि, इस बारे में पहले भी चर्चा हुई है । यदि चीजें बदलीं तो कृपया इस अनुभाग को अपडेट करने के लिए स्वतंत्र महसूस करें।


अस्थायी खेल डेटा

Windows Vista और निम्नलिखित:

C: \ ProgramData

विंडोज एक्स पी:

C: \ Documents and Settings \ {username} \ Local Settings \ Temp

आप TEMPपर्यावरण चर प्राप्त करके स्वचालित रूप से सही पता प्राप्त कर सकते हैं ।

सी ++ बूस्ट यूजर्स : इसके लिए एक सरल क्रॉस-प्लेटफॉर्म बूस्ट है।फाइल्स सिस्टम फ़ंक्शन है

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

मानक सी (सभी संकलक):

char* appdata = getenv("TEMP");

विजुअल स्टूडियो 20xx ( गेटेनव से बचें) यह कहते हुए चेतावनी देना कि यह सुरक्षित नहीं है - नॉन मेट्रो स्टाइल:

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

4
विस्टा और ऊपर, गेम सेव को बेहतर "सेव्ड गेम्स" फ़ोल्डर में रखा जाना चाहिए। यहाँ अधिक जानकारी: msdn.microsoft.com/en-us/library/windows/desktop/… "FOLDERID_SavedGames" के लिए देखें
Durza007

1
आपको कभी भी स्वयं पथ का अनुमान लगाने या पर्यावरण चर से निर्माण करने की कोशिश नहीं करनी चाहिए, वास्तव में। विस्टा और इसके बाद के संस्करण पर, आपको SHGetKnownFolderPath ( msdn.microsoft.com/en-us/library/bb762188.aspx ) और XP और नीचे SHGetFolderPath ( msdn.microsoft.com/en-us/library/bb762181.aspx ) का उपयोग करना चाहिए।
काइलोटन

@ कियलोतन और दुरज़ा ,००,, मैं समय पर थोड़ा छोटा हूं, इस उत्तर को आवश्यक रूप से संपादित करने के लिए स्वतंत्र महसूस करता हूं। इस उत्तर को सामुदायिक विकि बना दिया।
स्लेम

मुझे लगता है कि यह कहना महत्वपूर्ण है कि msdn प्रलेखन SHGetKnownFolderPath का उपयोग करने का सुझाव देता है क्योंकि SHGetFolderPath नई विधि के लिए सिर्फ एक आवरण है और केवल पिछड़े संगतता के लिए समर्थित है।
कागमुषा

16

मैक ओ एस

पर आधारित:

यूनिक्स-आधारित ओएस में, ~निर्देशिका स्वचालित रूप से उपयोगकर्ता के घर की निर्देशिका में स्थित है जहां उपयोगकर्ता-विशिष्ट डेटा स्थित हैं। इसका मतलब यह है कि इन प्लेटफार्मों पर जो भी भाषा है, आप ~ओएस-विशिष्ट फ़ंक्शन का उपयोग करने के बजाय स्वचालित रूप से इस फ़ोल्डर तक पहुंच सकते हैं । यह भी ध्यान दें कि /पूरे सिस्टम का रूट पथ है, मुख्य डिस्क के रूट का मार्ग नहीं है।

खेल निर्देशिका या खेल कंपनी के साथ अपनी खुद की निर्देशिका को फिर इन निर्देशिकाओं को खेल का नाम दें।


खिलाड़ी का खेल डेटा

यदि उपलब्ध हो तो क्लाउड में स्वचालित रूप से सहेजे जाने के लिए Apple की गाइडलाइन वहां मौजूद फाइलों को सहेजने और कॉन्फ़िगर करने के लिए है:

~ / दस्तावेज़

हालाँकि, इन फ़ाइलों का पता लगाने के लिए यह (और अधिक बार उपयोग किया जाता है) बेहतर है:

~ / पुस्तकालय / आवेदन समर्थन /

बस यह जान लें कि इस स्थिति में फ़ाइलें स्वचालित रूप से क्लाउड पर सहेजी नहीं जाएंगी। यदि आप खिलाड़ी को चुनना चाहते हैं, तो उसे चुनने के लिए मंच के एपीआई का उपयोग करें।

साझा किया गया गेम डेटा

/ पुस्तकालय / आवेदन समर्थन

ध्यान दें कि कोई भी नहीं है ~, यह उपयोगकर्ता के घर के सापेक्ष नहीं है , बल्कि सिस्टम के रूट के लिए है।

अस्थायी खेल डेटा:

यदि डेटा निष्पादन के बीच रखने की आवश्यकता नहीं है:

/ tmp

यदि डेटा निष्पादन के बीच रखा जाना चाहिए;

/ लाइब्रेरी / कैश (MacOSX के लिए)

सी ++ बूस्ट यूजर्स : इसके लिए एक सरल क्रॉस-प्लेटफॉर्म बूस्ट है।फाइल्स सिस्टम फ़ंक्शन है

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 "दस्तावेज़ जो उपयोगकर्ता किसी ऐप के उपयोगकर्ता इंटरफ़ेस में बनाता है और देखता है - उदाहरण के लिए पेज, नंबर और कीनोट में दस्तावेज़ ब्राउज़र को दस्तावेज़ निर्देशिका में संग्रहीत किया जाना चाहिए। दस्तावेज़ निर्देशिका में जाने वाली फ़ाइलों का एक और उदाहरण सहेजा गया गेम है। , फिर से क्योंकि वे कुछ हैं जो एक ऐप संभावित रूप से चयन के लिए कुछ प्रकार की विधि प्रदान कर सकते हैं। " - स्रोत: ऐप्पल की सिफारिश, पहले लिंक में। क्या मैं कुछ भुल गया?
स्लेम

2
उन सभी में जोर चयन पर है । उपयोगकर्ता चुनता है कि उनका नाम क्या है और वे कहाँ जाते हैं। फ़ाइलें जो उपयोगकर्ता प्रबंधन नहीं करती हैं उन्हें दस्तावेज़ों में नहीं रखा जाना चाहिए, क्योंकि दस्तावेज़ उपयोगकर्ता का नाम स्थान है, न कि डेवलपर। (अस्वीकरण: मैं दावा नहीं करता कि मेरी सलाह ऐप्पल के प्रलेखन के साथ संरेखण में है। मैं दावा करता हूं कि यह डिज़ाइन किए गए-मैक अनुप्रयोगों के बीच अभ्यास के बहुमत को दर्शाता है और उपयोगकर्ता इसके साथ अधिक खुश होंगे।)
केविन रीड

इसके अलावा, प्री-एक्स मैक ओएस पर कोई "लाइब्रेरी" निर्देशिका नहीं थी। लिंक्ड डॉक्यूमेंटेशन में "(OS X)" टिप्पणी आईओएस के साथ विपरीत है , जो आईओएस उपयोगकर्ता के लिए एक फाइल सिस्टम को उजागर नहीं करता है, क्योंकि यह पूरी तरह से अलग सवाल है।
केविन रीड

@KevinReid मैं लाइब्रेरी सामान अपडेट करूंगा, धन्यवाद। हालाँकि आप चयन और दस्तावेज़ों के बारे में क्या कहते हैं, यह विरोधाभासी लगता है। सहेजें खेल उपयोगकर्ता-सापेक्ष हैं, न कि अनुप्रयोग या डेवलपर सापेक्ष। वैसे यह खेल पर निर्भर करता है, यही कारण है कि एक साझा गेम डेटा निर्देशिका भी है। तो मुझे समझ में नहीं आता कि आप वास्तव में क्या मतलब है। क्या उस बारे में कुछ तर्कसंगत है?
बजे

13

लिनक्स डेबियन (उबंटू, फेडोरा, आदि)

पर आधारित:

यूनिक्स-आधारित ओएस में, ~ निर्देशिका स्वचालित रूप से उपयोगकर्ता के घर की निर्देशिका में स्थित होती है जहां उपयोगकर्ता-विशिष्ट डेटा स्थित होते हैं। इसका मतलब यह है कि इन प्लेटफार्मों पर जो भी भाषा है, आप ओएस-विशिष्ट फ़ंक्शन का उपयोग करने के बजाय ~ का उपयोग करके स्वचालित रूप से इस फ़ोल्डर तक पहुंच सकते हैं। यह भी ध्यान दें कि / पूरे सिस्टम का मूल पथ है, मुख्य डिस्क के रूट का मार्ग नहीं है।

खेल निर्देशिका या खेल कंपनी के साथ अपनी खुद की निर्देशिका को फिर इन निर्देशिकाओं को खेल का नाम दें।


खिलाड़ी का खेल डेटा

परंपरागत रूप से, खेल Aquaria के लिए यह होगा:

~ / .Aquaria

ध्यान दें कि निर्देशिका और फ़ाइलों के साथ शुरू .डिफ़ॉल्ट रूप से उपयोगकर्ता के लिए छिपा दिया जाएगा।

अधिकांश डेस्कटॉप अब XDG विनिर्देश का पालन करने की कोशिश करते हैं , जो अनुशंसा करता है

$ XDG_CONFIG_HOME / एक्वेरियम

या

$ XDG_DATA_HOME / एक्वेरियम

इसके बजाय कॉन्फ़िगरेशन और savegames के लिए।

यदि $XDG_CONFIG_HOMEउपयोग सेट नहीं है:

~ / .Config / एक्वेरियम

या

~ / .Local / एक्वेरियम

यह ज्यादातर उपयोगकर्ता की होम डाइरेक्टरी को अनसुना करने के लिए होता है, साथ ही उपयोगकर्ताओं को किसी एप्लिकेशन के कई प्रोफाइल चलाने की अनुमति देता है यदि वे इसे आवश्यक समझते हैं। विनिर्देश में अन्य समर्पित उपयोगकर्ता-विशिष्ट निर्देशिकाएं भी हैं।

साझा किया गया गेम डेटा

/ Var / खेल /

साझा की गई कॉन्फ़िग फ़ाइल में स्थित होना चाहिए

/ Etc / खेल /

अस्थायी खेल डेटा

/ tmp


1
विस्तृत करने के लिए: एक गेम "Aquaria" को अपने गेम डेटा को ~ / .aquaria (या ~ ~ .config / Aquaria) में रखना चाहिए। यह विश्व-योग्य निर्देशिका / var में होने के लिए बहुत अधिक है; ऐसा करने का सामान्य तरीका यह है कि अपने गेम के लिए एक उपयोगकर्ता खाता बनाएं और इसे केवल एक ही खाता बनाएं जो उस निर्देशिका को लिख सकता है (और सामान्य लोगों द्वारा गेम खेलने पर तब सेट्युड का उपयोग करें)। यह आप की तुलना में अधिक काम हो सकता है।
धसानन d

खैर, वास्तव में, अधिकांश डेस्कटॉप अब XDG विनिर्देशन का पालन करने की कोशिश करते हैं, जो विन्यास के लिए $ XDG_CONFIG_HOME / aquaria (या ~ / .config / aquaria निर्धारित नहीं है) और $ XDG_DATA_HOME / aquaria (या ~ / .Local / aquaria) की सिफारिश करता है। इसके बजाय savegames ( मानक देखें । Freedesktop.org/basedir-spec/basedir-spec-latest.html )। यह ज्यादातर उपयोगकर्ता की होम डाइरेक्टरी को अनसुना करने के लिए होता है, साथ ही उपयोगकर्ताओं को किसी एप्लिकेशन के कई प्रोफाइल चलाने की अनुमति देता है यदि वे इसे आवश्यक समझते हैं। विनिर्देश में अन्य समर्पित उपयोगकर्ता-विशिष्ट निर्देशिकाएं भी हैं।
लियोरी

@ लियोरी मैं कल जवाब अपडेट करूंगा अगर मुझे समय मिल सकता है, तो देरी के लिए खेद है। यदि आपको ऐसा लगता है और आपके पास समय है, तो कृपया जानकारी को अपडेट करने के लिए स्वतंत्र महसूस करें। यह मेरे लिए भी उपयोगी है।
Kलेम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.