windows - उपयोगकर्ता कॉन्फ़िगर करने योग्य एप्लिकेशन सेटिंग्स को संग्रहीत करने के लिए रजिस्ट्री बनाम INI फ़ाइल




registry settings (8)

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

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

विंडोज रजिस्ट्री बनाम एक स्थानीय आईएनआई फ़ाइल या कॉन्फ़िग फाइल या समान में उन्हें संसाधित करने में पेशेवरों और संसाधित करने के क्या उपाय हैं?


यहां एक समान सवाल है जो इसमें कुछ पेशेवरों और विपक्ष शामिल हैं

मैं रजिस्ट्री का उपयोग नहीं करने का सुझाव देता हूं जब तक कि आपके एप्लिकेशन को इसकी आवश्यकता नहीं है। मेरी समझ से, माइक्रोसॉफ्ट सेटिंग्स फ़ाइलों की लचीलेपन के कारण रजिस्ट्री के प्रयोग को हतोत्साहित करने का प्रयास कर रहा है। साथ ही, मैं .i फ़ाइलों का उपयोग करने की अनुशंसा नहीं करेगा, बल्कि उपयोगकर्ता / ऐप सेटिंग्स को बचाने के लिए कुछ अंतर्निहित कार्यक्षमता का उपयोग करने के लिए।


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


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


आईआईआई या कॉन्फ़िग फाइलों में एक दोष है और वह उन का पता लगा रहा है यदि प्रयोक्ता को यह विकल्प चुनने का विकल्प होता है कि कार्यक्रम कहाँ स्थापित है।


कॉन्फ़िग फ़ाइल के पेशेवरों:

  1. करने में आसान। किसी भी विंडोज़ एपीआई कॉल की आवश्यकता नहीं है। आपको अपनी प्रोग्रामिंग भाषा के फ़ाइल I / O इंटरफ़ेस को जानने की आवश्यकता है
  2. पोर्टेबल। यदि आप अपने एप्लिकेशन को किसी दूसरे ओएस पर बंद कर देते हैं, तो आपको अपनी सेटिंग्स प्रारूप बदलने की आवश्यकता नहीं है।
  3. उपयोगकर्ता-संपादन योग्य। उपयोगकर्ता प्रोग्राम निष्पादित करने से बाहर कॉन्फ़िग फ़ाइल को संपादित कर सकता है।

रजिस्ट्री के पेशेवर:

  1. सुरक्षित। उपयोगकर्ता गलती से कॉन्फ़िग फ़ाइल को नष्ट नहीं कर सकता है या डेटा को भ्रष्ट नहीं कर सकता जब तक कि वह / वह regedit के बारे में नहीं जानता। और फिर उपयोगकर्ता सिर्फ परेशानी के लिए पूछ रहा है।
  2. मैं कोई विशेषज्ञ विंडोज प्रोग्रामर नहीं हूँ, लेकिन मुझे यकीन है कि रजिस्ट्री का उपयोग करना अन्य विंडोज-विशिष्ट चीजों (उपयोगकर्ता-विशिष्ट सेटिंग्स, समूह नीति जैसी नेटवर्क प्रबंधन सामग्री, या जो कुछ भी) करना आसान बनाता है।

यदि आपको कॉन्फ़िगरेशन जानकारी को संग्रहीत करने के लिए बस एक सरल तरीका की आवश्यकता है, तो मैं INI या XML प्रारूप का उपयोग करके एक config फाइल की सिफारिश करेगा। मैं केवल रजिस्ट्री का उपयोग करने का सुझाव देता हूं यदि आप विशिष्ट रजिस्ट्री का उपयोग करने से बाहर निकलना चाहते हैं।


मौजूदा उत्तर में बहुत सारी जमीनएं शामिल हैं लेकिन मैंने सोचा कि मैं एक अन्य बिंदु का उल्लेख करूँगा।

मैं सिस्टम-वाइड सेटिंग्स को स्टोर करने के लिए रजिस्ट्री का उपयोग करता हूं यही है, जब 2 या अधिक कार्यक्रमों को सटीक समान सेटिंग की आवश्यकता होती है दूसरे शब्दों में, कई कार्यक्रमों द्वारा साझा की जाने वाली एक सेटिंग

अन्य सभी मामलों में मैं एक स्थानीय कॉन्फ़िग फ़ाइल का उपयोग करता हूं जो कि एक ही रास्ते में एक निष्पादन योग्य या नीचे एक स्तर (एक कॉन्फ़िगरेशन निर्देशिका में) के रूप में होती है। कारण पहले से ही अन्य उत्तर में हैं (पोर्टेबल, पाठ संपादक आदि के साथ संपादित किया जा सकता है)।

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

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

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

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


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

मैं आमतौर पर इस तरह पार्सिंग करता हूं (यदि .ini फ़ाइल में प्रारूप विकल्प = मान, प्रति पंक्ति 1, टिप्पणियां # से शुरू होती है):

static void Parse()
{
    StreamReader tr = new StreamReader("config.ini");
    string line;
    Dictionary<string, string> config = new Dictionary<string, string>();

    while ((line = tr.ReadLine()) != null)
    {
        // Allow for comments and empty lines.
        if (line == "" || line.StartsWith("#"))
            continue;

        string[] kvPair = line.Split('=');

        // Format must be option = value.
        if (kvPair.Length != 2)
            continue;

        // If the option already exists, it's overwritten.
        config[kvPair[0].Trim()] = kvPair[1].Trim();
    }
}

संपादित करें: क्षमा करें, मैंने सोचा था कि आपने भाषा निर्दिष्ट की थी। ऊपर कार्यान्वयन सी # में है।





ini