2010-05-04 13 views
7

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

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

+0

आप किस प्रकार का डेटा संग्रहीत कर रहे हैं? उपयोगकर्ता प्राथमिकताओं, आदि या आवेदन द्वारा उपयोग डेटा? – gooch

+0

मैं अविश्वसनीय रूप से सरल डेटा संग्रहीत कर रहा हूं। लगभग ऐसी स्थिति कभी नहीं होगी जहां 10 से अधिक ऑब्जेक्ट्स संग्रहीत हों। डेटा कार्य सेटिंग्स (यानी नाम, निर्देशिका, उपयोग करने के लिए प्लगइन इत्यादि) है जो एक सेवा में चलाया जाएगा जो मेरे व्यवस्थापक उपकरण के बाहर मौजूद होगा। यह जरूरी है कि सेवा इस जानकारी को पा सके। सेटिंग्स आदर्श होंगी, लेकिन सेवा से इसे एक्सेस करना ऐसा लगता है जैसे यह मुश्किल होगा। यह मैं कैसे करूंगा? –

उत्तर

7

डेटा बहुत है , बहुत आसान है, और आपको इसे अन्य एप्लिकेशन या उपयोगकर्ताओं (उचित अनुमतियों के साथ) द्वारा पठनीय करने की आवश्यकता है, मैं शायद इसे किसी XML फ़ाइल में संग्रहीत करना चाहूंगा या उपयोगकर्ता के एप्लिकेशन डेटा फ़ोल्डर के अंदर एक सादे-पाठ फ़ाइल भी चुनूं, जो होगा Environment.GetFolderPath के माध्यम से प्राप्त किया गया। बचत के लिए एक उदाहरण इस तरह दिख सकता है:

using System.IO; 
using System.Xml.Linq; 

string settingsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
if (!Directory.Exists(settingsDirectory)) 
    Directory.CreateDirectory(settingsDirectory); 
string fileName = "tasks.xml"; 
string settingsPath = Path.Combine(settingsDirectory, fileName); 
XDocument settingsDoc = new XDocument(
    new XElement("Tasks", 
     new XElement("Task", 
      new XElement("Name", "Make Breakfast"), 
      new XElement("Location", @"C:\Program Files\MyApp\Plugins"), 
      new XElement("FileName", "breakfast.dll")))); 
// ... etc. 
settingsDoc.Save(settingsPath); 

यही है - सेटिंग्स सहेजी गईं! आप उन्हें XDocument.Load के साथ फिर से लोड कर सकते हैं।

+0

धन्यवाद! यह भी खूब रही। क्या इस काम को सेटिंग्स जैसी सेटिंग्स बनाने के लिए वैसे भी है। सेटिंग्स जहां इसकी दृढ़ता से टाइप किया गया है? मुझे ऐसा कुछ करने में सक्षम होना अच्छा लगेगा: सेटिंग्स.डिफॉल्ट। कार्य = कार्यसूची; सेटिंग्स। Default.Save(); –

+0

@joe: यदि आप यही चाहते हैं, तो आपको 'XmlSerializer' क्लास और' System.Xml.Serialization' नामस्थान में देखना चाहिए। आप क्लास स्ट्रक्चर लेने और एक्सएमएल से "स्वचालित रूप से" क्रमबद्ध करने के लिए इनका उपयोग कर सकते हैं। आप निश्चित रूप से * वास्तविक 'सेटिंग्स' ऑब्जेक्ट का यह हिस्सा नहीं बना सकते हैं; यदि आप 'सेटिंग्स' का उपयोग करना चाहते हैं तो' सेटिंग्स' का उपयोग करें। यदि आप बस इसे 'Properties.Settings.Default' जैसी सिंगलटन ऑब्जेक्ट बनना चाहते हैं, तो यह संभव है लेकिन आपको पैटर्न को स्वयं लागू करना होगा। – Aaronaught

+0

ओह बीटीडब्ल्यू। क्या मुझे एप्लीकेशनडाटा के बजाय CommonAplicationData फ़ोल्डर का उपयोग करना चाहिए? प्रलेखन कहता है "वह निर्देशिका जो सभी उपयोगकर्ताओं द्वारा उपयोग किए जाने वाले एप्लिकेशन-विशिष्ट डेटा के लिए एक सामान्य भंडार के रूप में कार्य करती है।" –

0

लगता है जैसे आप इसे डेटाबेस में स्टोर करना चाहते हैं, सवाल स्थानीय या नेटवर्क पर है या नहीं। उत्तर यह भी निर्भर करता है कि आप किस प्रकार का डेटा संग्रहीत कर रहे हैं, आपका ऐप कैसे वितरित किया जाता है, और अन्य कारक।

ओह, और btw हम आपको बेहतर तरीके से अगर आप अपने मंच (एक टैग के साथ अधिमानतः) निर्दिष्ट मदद कर सकता है - Silverlight, WPF, WinForms, asp.net, कंसोल, आदि

+0

क्षमा करें, मैंने सोचा था कि प्लेटफ़ॉर्म निर्दिष्ट करने के लिए .NET टैग पर्याप्त था। वैसे भी, मुझे लगता है कि मेरे डेटा दृढ़ता की जरूरतों के लिए एक डेटाबेस अधिक हो सकता है। यह एक डब्ल्यूपीएफ आवेदन होने जा रहा है। –

+0

यह ठीक है, .NET सूचीबद्ध सभी प्लेटफ़ॉर्म को कवर कर सकता है, और जिनके पास मैंने नहीं किया है। –

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

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