2008-09-25 8 views
14

प्रोग्राम डेटा फ़ाइलों को संग्रहीत करने के लिए सही जगह क्या है जो प्रत्येक उपयोगकर्ता के लिए समान हैं लेकिन प्रोग्राम के लिए लिखने योग्य हैं? एमएस विंडोज एक्सपी पर समकक्ष स्थान क्या होगा? मैंने पढ़ा है कि सी: \ ProgramData सामान्य उपयोगकर्ताओं द्वारा स्थापना के बाद लिखने योग्य नहीं है। क्या यह सच है? मैं प्लेटफ़ॉर्म एसडीके का उपयोग करके प्रोग्रामेटिक रूप से उस निर्देशिका को कैसे पुनर्प्राप्त कर सकता हूं?Vista और ProgramData

उत्तर

8

SHGetFolderPath() CSIDL_COMMON_APPDATA के CSIDL के साथ।

http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx

पर और अधिक पढ़ें आप एक बैच फ़ाइल में पथ की जरूरत है, तो आप भी% AllUsersProfile% वातावरण चर का उपयोग कर सकते हैं।

+1

मेरा मानना ​​है कि वास्तव में% ALLUSERSPROFILE% है, एस –

+0

एरर के साथ, हाँ, यह सही है, मैंने एस को याद किया :-) –

1

आप उपयोग कर सकते हैं:

CString strPath; 
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE); 
1

Raymond Chen's article on this specific question देखें।

संक्षेप में आप सुरक्षा छेद के लिए पूछ रहे हैं।

+3

एप्लिकेशन का उपयोग प्रशासकों द्वारा नहीं किया जाएगा और कंप्यूटर पर लॉगिन करने वाले सभी लोग भरोसेमंद हैं जिन कंपनियों के साथ हम काम कर रहे हैं। तो उपयोगकर्ताओं के बीच साझा डेटा साझा करने के लिए यह एक सुरक्षा समस्या नहीं है। Vista पर कोई भी सार्वजनिक फ़ोल्डर में चित्र और फिल्में साझा कर सकता है। प्रोगम्स भी यह होना चाहिए। – frast

7

विभिन्न विकल्पों यहां के एक महान सारांश है: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

मैं कहाँ प्रोग्राम डेटा के बजाय प्रोग्राम फ़ाइलें लिखना चाहिए? ।। "मेरे आवेदन फाइलों कार्यक्रम फ़ाइलें लिखने के लिए इस्तेमाल किया यह रूप में अच्छा एक जगह है जैसे कि यह यह पहले से ही पर किसी भी अन्य यह था अपने आवेदन के नाम के रूप में डाल करने के लिए महसूस किया:

एक आम आवेदन कोड अद्यतन यह है और क्योंकि मेरे उन व्यवस्थापक थे, यह ठीक काम किया। लेकिन अब मैं देखते हैं कि इस के रूप में महान एक जगह के रूप में मैं एक बार सोचा था कि चीजें रहना, नहीं किया जा सकता मानक उपयोगकर्ता की तरह विशेषाधिकारों के साथ रन क्योंकि यूएसी भी प्रशासक के साथ अधिकतर समय। तो, मुझे कहां से अपनी फाइलें रखनी चाहिए? "

4

असल में SHGetFolderPath बहिष्कृत है।

SHGetKnownFolderPath इसके बजाए उपयोग किया जाना चाहिए।

+0

यदि मैं SHGetKnownFolderPath का उपयोग करता हूं तो मेरा सॉफ़्टवेयर केवल Windows Vista के अंतर्गत चलाएगा। SHGetFolderPath विंडोज 2000 और Vista पर भी काम करता है। – frast

+0

@frast, हाँ, लेकिन आप SHGetKnowFolderPath उपलब्धता की जांच कर सकते हैं और बाहर निकलने पर इसका उपयोग कर सकते हैं। (लोडप्रोक या जो भी इसे कहा जाता है ...) के बाद आपका ऐप भविष्य के सबूत और विंडोज संस्करणों पर काम करेगा जहां एसएचजीएफ़फोल्डरपैथ गिरा दिया गया है, साथ ही साथ विंडोज 2000 पर भी। –

+1

@ अमेजिबल मैं ऐसा करूँगा, लेकिन मैं तब तक प्रतीक्षा करता हूं जब तक कि मैं देखूं विंडोज संस्करण जो SHGetFolderPath का समर्थन नहीं करता है। – frast

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