2011-07-20 9 views
16

मैं सामग्री रनटाइम पर ग्राहक जो वहाँ एप्लिकेशन लॉन्च होने हर बार होने की उम्मीद है द्वारा डाउनलोड स्टोर करने के लिए ApplicationDeployment.CurrentDeployment.DataDirectory उपयोग किया गया है, हालांकि अब मैंने पाया यह मालूम होता है बेतरतीब ढंग से करता है, तो आवेदन अद्यतन किया जाता है बदल जाता है।कहाँ मैं सुरक्षित रूप से एक ClickOnce तैनाती के लिए डेटा फ़ाइलों को स्टोर कर सकते हैं?

क्लिक-एक बार की तैनाती में आवेदन के लिए उपयोगकर्ता डेटा संग्रहीत करने के लिए सबसे अच्छा विश्वसनीय तरीका क्या है?

वर्तमान में मैं निम्न विधि

private const string LocalPath = "data"; 

public string GetStoragePath() { 
    string dir; 
    if (ApplicationDeployment.IsNetworkDeployed) { 
     ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; 
     dir = Path.Combine(ad.DataDirectory, LocalPath); 
    } else { 
     dir = LocalPath; 
    } 
    return CreateDirectory(dir); 
} 

उपयोग कर रहे हैं मैं मूल रूप से बढ़ रहा ClickOnce Data Directory के तहत लेख Accessing Local and Remote Data in ClickOnce Applications जो इस पथ की सिफारिश की है कहा गया है का पालन किया।

नोट: CreateDirectory(string) बस एक निर्देशिका बनाता है यदि यह पहले से मौजूद नहीं है।

मुझे अपनी समस्या का मूल कारण मिला है, मैं कई फाइलें और एक इंडेक्स फ़ाइल बना रहा हूं, इस अनुक्रमणिका फ़ाइल में पूर्ण पथ हैं, एक बार अपग्रेड पर सामग्री (या प्रतियां) को क्लिक करें, इसलिए पूर्ण पथ अब मौजूद नहीं हैं। मैं अलग भंडारण की जांच करेंगे Damokles अगर यह एक ही तरफ क्लिक-एक बार तैनाती के लिए प्रभावित करते हैं देखने के लिए पता चलता है के रूप में।

+1

यदि आप अलग भंडारण मार्ग पर जाते हैं, तो प्रश्नों को देखना सुनिश्चित करें ... http: // stackoverflow।कॉम/प्रश्न/202013 – codeConcussion

+0

धन्यवाद whatknott, मैं इसे ध्यान में रखूंगा। –

उत्तर

20

एक अन्य विकल्प को उपयोगकर्ता के AppData फ़ोल्डर में अपने आवेदन के लिए एक निर्देशिका बनाने के लिए और यह वहाँ स्टोर करने के लिए है। आप इसके साथ एक रास्ता प्राप्त कर सकते हैं:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

आपको बहुत सारे एप्लिकेशन उपयोग करेंगे (और यह स्थानीय समतुल्य है)। यह ClickOnce संस्करणों के बीच भी नहीं चलता है।

+0

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

+0

यहां आपके लिए एक सवाल है, दोस्तों। जब आप ClickOnce एप्लिकेशन को अनइंस्टॉल करते हैं तो इन फ़ाइलों के साथ क्या होता है? –

+0

@AlexSorokoletov कुछ भी नहीं। वे आवेदन का हिस्सा नहीं हैं इसलिए वे चारों ओर चिपके रहते हैं। – Tridus

5

बाहर चेक IsolatedStorage इस मदद करनी चाहिए। यह आंशिक विश्वास वातावरण में भी काम करता है।

आप डेटा रखने के लिए आप this post

+0

धन्यवाद डेमोकल्स, मैं इसे देख लूंगा। मैंने पाया कि क्लिकऑन वास्तव में मेरे डेटा की प्रतिलिपि बनाता है, लेकिन मैंने पूर्ण पथों को संग्रहित किया था और पुरानी फाइलों का अस्तित्व नहीं था, क्या अलग भंडारण में एक ही समस्या होगी या क्लिक-एक बार मेरे लिए अकेला छोड़ देगा? –

+0

@ ब्रेट: हाँ IsolatedStorage उस समस्या को ठीक करेगा यदि आप इसे सही तरीके से उपयोग करते हैं। –

+0

डेमोकल्स, इस उत्तर के लिए बहुत बहुत धन्यवाद, मुझे लगता है कि यह एक अच्छा दृष्टिकोण होगा और इसे नए अनुप्रयोगों के लिए ध्यान में रखेगा, हालांकि मैंने 'एप्लिकेशनडाटा' दृष्टिकोण का उपयोग करना चुना है क्योंकि यह बहुत कम घुसपैठ परिवर्तन है। मैं आपके उत्तर के लिए बहुत बहुत धन्यवाद। –

4

यह डेटा आप बचत कर रहे हैं पर निर्भर करता है से लिया application scoped IsolatedStorage

using System.IO; 
using System.IO.IsolatedStorage; 
... 

IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();  
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope)) 
{ 
... 

कोड का उपयोग करने की जरूरत है।

आप वर्तमान में डाटा निर्देशिका के लिए बचत कर रहे हैं ठीक है। आपको इसके बारे में जागरूक होने की आवश्यकता है कि एप्लिकेशन के प्रत्येक संस्करण की अपनी डेटा निर्देशिका है। जब आप क्लिकऑन अपडेट करते हैं तो एप्लिकेशन को शुरू होने पर पिछले संस्करण के सभी डेटा को नए संस्करण में कॉपी किया जाता है। यह आपको एक संस्करण से अगले संस्करण में किसी भी डेटा को माइग्रेट करने के लिए एक हुक देता है। एसक्यूएल लाइट या एसक्यूएल सीई जैसे मेमोरी डेटाबेस में यह अच्छा है।

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

Isolated Storage

Local User Application Data

+0

इस ब्रोनुम्स्की के लिए धन्यवाद, यह कुछ समस्याओं को दोहराता है I सामना कर रहा था, मेरा डेटा आकार लगभग 50 एमबी से बड़ा नहीं है। –

+3

इसके अलावा, यदि आपने नई फाइलें बनाई हैं तो यह डेटा आगे नहीं ले जाती है। इसमें केवल डेटा होता है जो अगले संस्करण में आगे तैनात किया जाता है। – RobinDotNet

+0

@RobinDotNet अच्छा बिंदु – Bronumski

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