2008-11-06 7 views
41

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

अभी, मैं केवल वर्तमान निर्देशिका का उपयोग कर रहा हूं, जो उन्हें प्रोग्राम फाइल निर्देशिका में डाल देता है जहां मेरा प्रोग्राम रहता है।

लॉग फ़ाइलों को शायद उपयोगकर्ता द्वारा कुछ हद तक नियमित रूप से एक्सेस किया जाएगा, इसलिए %APPDATA% पाने के लिए थोड़ा मुश्किल लगता है।

%USERPROFILE%\My Documents के तहत एक निर्देशिका है? इसे 2000 के आगे से विंडोज के सभी संस्करणों के लिए काम करने की जरूरत है।

+0

यह भी देखें [यह प्रश्न] (http://stackoverflow.com/questions/1556082/as-a-developer-how-should-i-use-the-special- फ़ोल्डर्स-in- Vista-and-windows- 7) –

उत्तर

28

यदि आप अपने आवेदन और उपयोगकर्ता सेटिंग्स को प्रबंधित करने के लिए ConfigurationManager का उपयोग नहीं कर रहे हैं, तो आपको होना चाहिए। .NET Framework में कॉन्फ़िगरेशन टूलकिट उल्लेखनीय रूप से अच्छी तरह से सोचा गया है, और विजुअल स्टूडियो टूल्स जो इसके साथ इंटरऑपरेट करते हैं।

ConfigurationManager का डिफ़ॉल्ट व्यवहार सही जगहों पर इनवेरिएंट (एप्लिकेशन) और संशोधित (उपयोगकर्ता) सेटिंग्स दोनों रखता है: एप्लिकेशन सेटिंग्स एप्लिकेशन फ़ोल्डर में जाती हैं, और उपयोगकर्ता सेटिंग्स System.Environment.SpecialFolder.LocalApplicationData में जाती हैं। यह विंडोज के सभी संस्करणों के तहत ठीक से काम करता है जो .NET का समर्थन करता है।

लॉग फ़ाइलों के लिए, System.Environment.SpecialFolder.LocalApplicationData आमतौर पर वह जगह है जिसे आप उन्हें रखना चाहते हैं, क्योंकि यह उपयोगकर्ता-लिखने योग्य होने की गारंटी है।

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

मेरे पास ConfigurationManager और वीएस टूल्स के बारे में कुछ शिकायतें हैं: वहां से बेहतर उच्च स्तरीय दस्तावेज होने की आवश्यकता है, और वीएस-जेनरेट Settings कक्षा के बेहतर दस्तावेज़ीकरण की आवश्यकता है। तंत्र द्वारा app.config फ़ाइल लक्ष्य निर्माण निर्देशिका में अनुप्रयोग कॉन्फ़िगरेशन फ़ाइल में बदल जाती है अपारदर्शी (और सभी के सबसे अक्सर पूछे जाने वाले प्रश्नों में से एक का स्रोत: "मेरे कनेक्शन स्ट्रिंग के साथ क्या हुआ?")। और यदि ऐसी सेटिंग्स बनाने का कोई तरीका है जिनके पास डिफ़ॉल्ट मान नहीं हैं, तो मुझे यह नहीं मिला है।

+6

सिस्टम का उपयोग कर। पर्यावरण। SpecialFolder.LocalApplicationData कॉन्फ़िगरेशन सेटिंग्स के लिए एक दोष है - यह रोमिंग प्रोफाइल के साथ दोहराना नहीं है, अगर उपयोगकर्ता ऐसे वातावरण में है। और मुझे इसके साथ बुरा अनुभव था, जब मुझे अपने ऐप को बाद में संशोधित करना पड़ा, जब मुझे इस तरह के उपयोगकर्ता मिल गए। –

+0

आप जो भी लॉगिंग कर रहे हैं उसके आधार पर। यदि लॉग उपयोगकर्ता के निष्पादन के लिए विशिष्ट हैं तो पर्यावरण का उपयोग करें। SpecialFolder.LocalAplicationData। यदि आप सामान्य एप्लिकेशन आंकड़ों को लॉगिंग करते हैं तो मैं पर्यावरण का उपयोग करने की सलाह दूंगा। SpecialFolder.CommonAplicationData –

0

मैं कॉन्फ़िगरेशन के लिए अलगाव संग्रहण का उपयोग करता हूं। लॉग इन जैसी अस्थायी जानकारी संग्रहीत करने के लिए आप Temp फ़ोल्डर का भी उपयोग कर सकते हैं।

+3

टेम्प ऐप में अपना ऐप लॉग डालना एक बुरा विचार है। – RWendi

+0

यह आपकी राय है। लॉग अस्थायी माना जाता है ... आपके आवेदन पर निर्भर हो सकता है। –

+3

और मैं तर्क दूंगा कि "लॉग अस्थायी होने चाहिए" आपकी राय भी है। –

1

सबसे अच्छा जवाब लॉग और कॉन्फ़िगरेशन की प्रकृति पर निर्भर करता है। यदि वे प्रोग्राम-व्यापी हैं, और एप्लिकेशन की स्थापना रद्द करने की आवश्यकता नहीं है, तो मुझे लगता है कि वे ठीक हैं जहां वे हैं। यदि लॉग और कॉन्फ़िगरेशन उपयोगकर्ता विशिष्ट हैं, या अनइंस्टॉलेशन से बचने की आवश्यकता है, तो वे इस प्रकार की चीज़ के लिए% USERPROFILE% -% APPDATA% के अंतर्गत 'उचित' आधार निर्देशिका के अंतर्गत हैं।

4

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

विंडोज 7 उपयोगकर्ताओं को यूएसी पॉपअप का उपयोग करने की अनुमति देगा (कुछ बिजली उपयोगकर्ताओं को उनमें से अधिकांश को अवरुद्ध करने की उम्मीद है) और यदि उपयोगकर्ता इस लेखन प्रयास को कभी भी मंजूरी नहीं देता है तो आपका ऐप असफल हो जाएगा।

यदि आप उचित उपयोगकर्ता प्रोफाइल और एपडाटा चर का उपयोग करते हैं, तो विन 2000, XP, Vista, और Win7 डेटा को किसी भी यूएसी पॉपअप के साथ उचित लेखन अनुकूल फ़ोल्डर में मैप करेगा।

8

आवेदन सेटिंग्स के लिए - सिस्टम का उपयोग करें। पर्यावरण। SpecialFolder.AplicationData - यह वह जगह है जहां रोमिंग प्रोफाइल डेटा संग्रहीत किया जाता है, इसलिए यह आपके उपयोगकर्ता को डोमेन में विभिन्न मशीनों से लॉग और काम करने की अनुमति देता है।

लॉग फ़ाइलों के लिए - System.Environment.SpecialFolder.LocalApplicationData

5

ईमानदार% AppData% अभी भी अपने config फाइल रखने और लॉग फ़ाइलें, के रूप में यह एक प्लेसहोल्डर स्टोर करने के लिए करने के उद्देश्य से कार्य करता है के लिए सबसे अच्छी जगह है होना करने के लिए अपने अनुप्रयोग डेटा। इसे एक्सेस करना मुश्किल नहीं होना चाहिए, केवल एक्सप्लोरर में% appdata% लिखें और आपको सीधे अपनी% appdata% निर्देशिका में निर्देशित किया जाएगा।

+4

कूल चाल ... मुझे उस% appdata% शॉर्टकट के बारे में पता नहीं था। +1 –

2

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

XP के लिए:: C:\Documents and Settings\All Users\Application Data

Vista के लिए

int MAX_PATH = 255; 

CString m_strMyPath; 

SHGetSpecialFolderPath(NULL, m_strMyPath.GetBuffer(MAX_PATH), CSIDL_COMMON_APPDATA, TRUE); 

इस 'विशेष फ़ोल्डर पथ' जो आप सुरक्षित रूप से खिड़कियों के लिए के लिए लॉग लिख सकते हैं निर्दिष्ट करेंगे: C:\ProgramData

यहां एमएसडीएन पृष्ठ देखें: http://msdn.microsoft.com/en-us/library/bb762204(VS.85).aspx

8

ध्यान दें: आप निम्नलिखित फ़ंक्शन का उपयोग करके .NET में LocalApplicationData फ़ोल्डर में पथ प्राप्त कर सकते हैं:

string strPath=System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData); 
5

स्वीकार किए जाते हैं जवाब नोटों लॉग के लिए फ़ाइलें जो निम्न एक अच्छा स्थान है। System.Environment.SpecialFolder.LocalApplicationData यह C:\Users\[User]\AppData\Roaming के पथ के बराबर है जो आप देख सकते हैं उपयोगकर्ता विशिष्ट है। स्वीकार्य उत्तर उल्लेखों की तरह यह एक गारंटीकृत उपयोगकर्ता-लिखने योग्य स्थान है और कुछ स्थितियों के लिए उपयोगी हो सकता है

हालांकि वेब अनुप्रयोग वातावरण में आप अपने आवेदन को नेटवर्क खाते के तहत चला रहे हैं और आप या एक सहकर्मी को कोशिश करने की आवश्यकता हो सकती है और ट्रैक करें कि वास्तव में वे लॉग प्रति एप्लिकेशन कहां जा रहे हैं। मैं व्यक्तिगत रूप से System.Environment.SpecialFolder.CommonApplicationData के गैर उपयोगकर्ता विशिष्ट स्थान गणना का उपयोग करना चाहता हूं जो C:\ProgramData के बराबर है। हां, आपको अपने द्वारा बनाए गए किसी भी फ़ोल्डर के लिए एक्सेस अधिकार निर्दिष्ट करना होगा, लेकिन आमतौर पर यह एक बार का सौदा होता है और फिर आपके सभी एप्लिकेशन लॉग एक खुश स्थान पर रह सकते हैं।

इसके अतिरिक्त, जबकि इंटरनेट चारों ओर देख, वहाँ एक परियोजना को वहाँ प्रोग्राम के लिए लेखन पहुँच आप CommonApplicationData भीतर बनाने फ़ोल्डर को स्थापित करने के लिए, Allow write/modify access to CommonApplicationData है।

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

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