2010-11-25 20 views
14

मुझे पिछले 6 वर्षों से WinXP पर चल रहे वीबी 6 एप्लिकेशन को अपडेट करने के लिए कहा गया है। ग्राहक विंडोज 7 का उपयोग करना चाहता है। अब तक, ऐप ने एप्लिकेशन सेटिंग्स में स्थित आईएनआई फ़ाइल में अपनी सेटिंग्स संग्रहीत की हैं। XP और 7 के बीच एक महत्वपूर्ण अंतर यह है कि आप अब C:\Program Files\AppFolder पर नहीं लिख सकते हैं।मुझे एप्लिकेशन विशिष्ट सेटिंग्स कहां स्टोर करनी चाहिए?

मैं यह पता लगाने की कोशिश कर रहा हूं कि फ़ाइल सिस्टम पर सेटिंग्स को स्टोर करना चाहिए? यह देखते हुए कि WinXP पर अभी भी चलाने की आवश्यकता है, मैं उलझन में हूं।

WinXP पर, मैं निम्नलिखित है:

C:\Documents and Settings\profilename\Application Data 
C:\Documents and Settings\profilename\Local Settings\Application Data 

विंडोज 7 पर, मैं निम्नलिखित है:

C:\Users\profilename\AppData\Local 
C:\Users\profilename\AppData\LocalLow 
C:\Users\profilename\AppData\Roaming 

इन फ़ोल्डरों में से हर एक सबफ़ोल्डर कि के लिए सेटिंग्स/फ़ाइलों को स्टोर करने लगते है विभिन्न उत्पादों

तो 2 सवाल:

  1. इन सभी फ़ोल्डर्स को देखते हुए, मैं अपनी सेटिंग्स कहां स्टोर करूं?
  2. मुझे लगता है कि एक निफ्टी विंडोज एपीआई कॉल है जो मुझे इस फ़ोल्डर का उचित स्थान देगा। और मुझे उम्मीद है कि यह XP और 7 दोनों पर काम करता है। क्या मेरी धारणा सही है? यदि ऐसा है, तो एक लिंक की सराहना की जाएगी।
+0

+1 लेकिन इसे एक महत्वपूर्ण अंतर के रूप में नहीं सोचने का प्रयास करें। आपको शायद विंडोज़ के प्री-विस्टा संस्करणों पर साझा "प्रोग्राम फाइल" फ़ोल्डर में लिखना नहीं चाहिए था। –

उत्तर

12

आप उपयोग कर सकते हैं विशेष फ़ोल्डरों के एक नंबर, XP/Vista/विंडोज 7 पर हैं:।

  • CSIDL_APPDATA फ़ोल्डर एक आप की संभावना सबसे अधिक दिलचस्पी हो जाएगा डाटा यहां संग्रहीत रोमिंग के लिए उपलब्ध है उपयोगकर्ता जो भी मशीन में लॉग इन करते हैं। सरल कॉन्फ़िगरेशन डेटा स्टोर करने के लिए यह सबसे अच्छी जगह है। सभी उपयोगकर्ताओं के पास इस (और अंतिम) फ़ोल्डर तक पहुंच है। ध्यान दें कि उपर्युक्त फ़ोल्डर में से कोई भी उपयोगकर्ता द्वारा जेनरेट किए गए डेटा के लिए नहीं है! यह ठीक से मेरे दस्तावेज़ पदानुक्रम के अंतर्गत होगा।
  • संपादित करें: जैसा कि कोडी ग्रे टिप्पणियों में सुझाव देता है, आवेदन डेटा के लिए CSIDL_LOCAL_APPDATA पर भी विचार करें जो हमेशा मौजूदा मशीन के लिए स्थानीय होगा, लेकिन प्रति उपयोगकर्ता आधार पर अलग किया जाएगा। इस फ़ोल्डर में डेटा रोमिंग आधार पर उपलब्ध नहीं है, इसलिए यह डेटा होना चाहिए कि यदि उपयोगकर्ता किसी भिन्न मशीन में लॉग इन करते हैं तो उपयोगकर्ता को याद नहीं आएगा।

मैंने वीएल 6 प्रोग्रामर के लिए यह समझाते हुए, कार्ल पीटरसन द्वारा good article से ऊपर की व्याख्या की नकल की प्रतिलिपि बनाई। कार्ल में ready-to-use class भी है जो आपको निर्देशिकाओं को खोजने में मदद करेगा, लेकिन IMHO इस समय वह जटिल चीजें हैं। Bob Riemersma has a better way in one line, नीचे दिए गए Shell object का उपयोग कर। संपादित करें बॉब की टिप्पणी नीचे बताती है कि देर से बाध्यकारी का उपयोग करने के लिए प्रारंभिक बाध्यकारी के बजाय इसका उपयोग क्यों करना सबसे अच्छा है।

Const ssfCOMMONAPPDATA = &H23 
Const ssfLOCALAPPDATA = &H1c 
Const ssfAPPDATA = &H1a 
Dim strAppData As String 

strAppData = _ 
    CreateObject("Shell.Application").NameSpace(ssfAPPDATA).Self.Path 

मेरी राय में यह continue to use INI files इन निर्देशिकाओं में ठीक है।

+3

+1 'CSIDL_APPDATA' वह फ़ोल्डर है जिसका आप शायद उपयोग कर रहे हैं। हालांकि, उन सेटिंग्स के लिए जिन्हें उपयोगकर्ता के साथ घूमना नहीं चाहिए, 'CSIDL_LOCAL_APPDATA' का उपयोग करने पर विचार करें। –

+0

धन्यवाद, यह वही है जो मुझे चाहिए था। – AngryHacker

+4

मैं चेतावनी जोड़ना चाहता हूं कि शैल लाइब्रेरी का संदर्भ जोड़ने के लिए चालाक लग सकता है और प्रारंभिक बाध्यकारी (साथ ही सभी शेल स्पेशल फ़ोल्डर्स स्थिरांक सवारी के लिए आते हैं) का उपयोग करें, माइक्रोसॉफ्ट बाइनरी संगतता को संरक्षित करने के बारे में सावधान नहीं है Shell32.dll का COM इंटरफ़ेस। इस पर देर से बाध्यकारी के साथ चिपकाएं, आपका प्रोग्राम इसे एक कसकर लूप में नहीं बुलाएगा, इसलिए प्रदर्शन कोई मुद्दा नहीं है। – Bob77

1

शायद आप विंडोज रजिस्ट्री में अपनी सेटिंग्स को सेव कर सकते हैं? यह बहुत आसान है। आईएनआई फ़ाइल बनाने से सेवसेटिंग और गेटसेटिंग का उपयोग करना बहुत आसान है। और संगतता में कोई समस्या नहीं है, WinNT से विंडोज 8 तक।

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