2010-04-06 13 views
6

नहीं पूरी तरह से एक प्रोग्रामिंग सवाल, लेकिन इतना यहाँ पर्याप्त अपने पास चला जाता है:विंडोज अनुप्रयोग डेटा निर्देशिका

मैक ओएस में मैं ~/Library/Application Data/{MyApp}/ में मेरे अनुप्रयोग के लिए उपयोगकर्ता के विशिष्ट फ़ाइलों डाल देता हूँ और * nix में मैं उन्हें डाल देता हूँ ~/.{MyApp}/ में - मुझे उन्हें विंडोज़ के लिए कहां रखा जाना चाहिए?

मैं इस निर्देशिका में जाने के लिए रूबी के File.expand_path का उपयोग करूँगा, इसलिए यदि ~ के बराबर विंडो है तो यह ठीक है।

(Windows XP, Vista और 7 के लिए जवाब अगर वे एक ही नहीं कर रहे हैं की सराहना की जाएगी)

उत्तर

3

विंडोज़ पर ऐसा करने का तरीका ApplicationData पर्यावरण चर का उपयोग करना है। यदि आप सी # का उपयोग कर रहे थे तो आप System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) का उपयोग करने के लिए मानचित्र को प्राप्त कर सकते हैं, रूबी समकक्ष के ENV['APPDATA'] के लिए googling। अंग्रेजी भाषा के विंडोज में यह नक्शे के लिए:

C:\Users\%username%\AppData\Roaming\

C:\Documents and Settings\%username%\Application Data\ (XP पर) (विस्टा और विंडोज 7 पर)

यह आप के रूप में अन्य भाषाओं में किसी अन्य फ़ोल्डर के लिए नक्शे सकता है, लेकिन जब तक पर्यावरण परिवर्तनीय से निर्देशिका प्राप्त करें और हार्ड कोड नहीं है तो यह वास्तव में कोई फर्क नहीं पड़ता है। यदि आप अपने ऐप के लिए वहां एक फ़ोल्डर बनाते हैं और वहां डेटा स्टोर करते हैं, तो Vista और 7 यूएसी संकेतों के बिना इसे पढ़ने और लिखने की अनुमति देगा।

+1

बस कृपया miket2e सूचीबद्ध पथों को हार्ड कोड न करें - इसके बजाय देशी विंडोज ऐप्स के लिए .NET ऐप्स या ShGetFolderPath (NULL, CSIDL_APPDATA, NULL, ...) के लिए Environment.SpecialFolder.AplicationData का उपयोग करें। –

+0

और रूबी में? फिलहाल मुझे कठोर कोड ~/AppData/MyApp करना होगा क्योंकि मुझे रूबी में एप्लिकेशन डेटा फ़ोल्डर का कोई तरीका नहीं है! –

0

बेतकल्लुफ़, मुझे यकीन है कि कैसे रूबी विंडोज के लिए ~ पर expand_path हैंडल नहीं कर रहा हूँ। इस तरह की चीज के लिए विंडोज़ में SHGetSpecialFolderPath, और SHGetSpecialFolderLocation जैसे कार्य हैं। यह विस्तार_पथ के लिए उनमें से एक का उपयोग करने के लिए एक स्पष्ट चीज़ की तरह प्रतीत होता है, लेकिन मुझे नहीं पता कि यह निश्चित रूप से करता है या नहीं।

+1

एक नाइट, लेकिन SHGetSpecialFolderPath को ShGetFolderPath (http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx) के पक्ष में बहिष्कृत किया गया है। –

+0

@ लैरी: अच्छा बिंदु - मुझे इसका उल्लेख करना चाहिए था। इसे जोड़ने के लिए धन्यवाद। –

0

विस्टा और विंडोज 7 और Windows XP के लिए,

char appdir[MAX_PATH];  
    size_t requiredSize; 
    errno_t err= getenv_s(&requiredSize, appdir, MAX_PATH, "appdata"); 

निकाले गए API या जो कि Windows XP पर काम नहीं करते से अधिक सरल लगता है।

संबंधित मुद्दे