2012-06-20 5 views
7

मैं विंडोज 8 में अपने प्रकाशित ऐप को विन 8 पर पोर्ट कर रहा हूं। IsolatedStorage समकक्ष, ApplicationDataContainer पर लिखने की कोशिश करते समय, मुझे अपवाद मिलता है। अपवाद कहतेएप्लिकेशनडाटा कॉम्पोसाइटसाइट के लिए आकार

त्रुटि: राज्य प्रबंधक सेटिंग के आकार की सीमा

मैं सुनिश्चित नहीं हूं पार कर गया है कि अगर यह ApplicationDataContainer का उपयोग करने का सही तरीका है।

public void WriteToIsolatedStorage() 
    { 
     try 
     { 

      ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; 
      ApplicationDataCompositeValue composite = new ApplicationDataCompositeValue(); 

      if (localSettings.Containers.ContainsKey("LoveCycleSetting")) 
      { 
       localSettings.DeleteContainer("LoveCycleSetting"); 
      } 

      composite["GetWeekStart"] = m_bWeekStart; 

      composite["iHistCount"] = m_iHistCount; 

      composite["dtHistory"] = this.DateTimeToString(m_dtHistory); 

      composite["avgCycleTime"] = m_iAvgCycleTime; 
     } 
    } 

अपवाद दूसरी अंतिम पंक्ति में होता है। m_dtHistory आकार 400 की एक स्ट्रिंग सरणी है। तो क्या ApplicationDataCompositeValue का एक निश्चित आकार है? या मुझे m_dtHistory सरणी को फ़ाइल में लिखना है? विंडोजफोन में Cuz मैं सीधे सरणी IsolatedStorageSettings में लिख सकता था।

अगर कोई मुझे इस पर मार्गदर्शन कर सकता है या लिंक दे सकता है तो यह वास्तव में सहायक होगा।

Alfah

+1

क्या http://msdn.microsoft.com/en-US/library/windows/apps/windows.storage.applicationdata.roamingstoragequota](http://msdn का मूल्य [है .microsoft.com/en-US/library/windows/apps/windows.storage.applicationdata.roamingstoragequota) –

+0

इस त्रुटि का जर्मन संस्करण शायद HRESULT 0x80073DC8 है "Die Größe des Einstellungswerts des Zustands-प्रबंधकों टोपी डेन Grenzwert überschritten" –

उत्तर

6

हाँ, विडंबना यह है कि सेटिंग भंडारण WinRT से फोन पर आसान है है। आप बस इसके बजाय फ़ाइल में क्रमबद्ध कर सकते हैं। यहां मैंने जो किया है (आंशिक रूप से SuspensionManager.cs में पहले से कोड से कॉपी किया गया है), जो मूल्य और संदर्भ प्रकार दोनों के लिए काम करता है।

internal static async Task<bool> SaveSetting(string Key, Object value) 
    { 
     var ms = new MemoryStream(); 
     DataContractSerializer serializer = new DataContractSerializer(value.GetType()); 
     serializer.WriteObject(ms, value); 
     await ms.FlushAsync(); 

     // Uncomment this to preview the contents being written 
     /*char[] buffer = new char[ms.Length]; 
     ms.Seek(0, SeekOrigin.Begin); 
     var sr = new StreamReader(ms); 
     sr.Read(buffer, 0, (int)ms.Length);*/ 

     ms.Seek(0, SeekOrigin.Begin); 
     StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(Key, CreationCollisionOption.ReplaceExisting); 
     using (Stream fileStream = await file.OpenStreamForWriteAsync()) 
     { 
      await ms.CopyToAsync(fileStream); 
      await fileStream.FlushAsync(); 
     } 
     return true; 
    } 

    // Necessary to pass back both the result and status from an async function since you can't pass by ref 
    internal class ReadResults 
    { 
     public bool Success { get; set; } 
     public Object Result { get; set; } 
    } 
    internal async static Task<ReadResults> ReadSetting<type>(string Key, Type t) 
    { 
     var rr = new ReadResults(); 

     try 
     { 
      var ms = new MemoryStream(); 
      DataContractSerializer serializer = new DataContractSerializer(t); 

      StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(Key); 
      using (IInputStream inStream = await file.OpenSequentialReadAsync()) 
      { 
       rr.Result = (type)serializer.ReadObject(inStream.AsStreamForRead()); 
      } 
      rr.Success = true; 
     } 
     catch (FileNotFoundException) 
     { 
      rr.Success = false; 
     } 
     return rr; 
    } 
0

मैंने कहीं पढ़ा है लेकिन संदर्भ खो आकार 64KB

+1

नहीं , यह 20 केबी डेटा – balint

+0

को भी संभाल नहीं सकता है, मुझे लगता है कि वह सही है कि सभी मानों के लिए कुल 64 किलोबाइट है। व्यक्तिगत मूल्यों के लिए अधिकतम हालांकि बहुत छोटा हो सकता है। –

1

प्रत्येक सेटिंग के नाम पर ज्यादा से ज्यादा की लंबाई 255 वर्णों हो सकता है। प्रत्येक सेटिंग आकार में 8 के बाइट तक हो सकती है और प्रत्येक समग्र सेटिंग आकार में 64 के बाइट तक हो सकती है।

https://msdn.microsoft.com/library/windows/apps/windows.storage.applicationdata.localsettings.aspx

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