2010-11-20 16 views
2

Windows Phone 7 App Uygulamanın amacı basit bir Yapılacaklar listesidir. Bir 'toditem' sınıfına sahibim, bu nesneleri Items nesnesine ekliyorum.silverlight, Yüklemeyi kaldır, IsolatedStorageFile ve IsolatedStorageFileStream. İstisnalar

o gerçekten karmaşık ve büyük olasılıkla hiçbir temiz ya da iyi kod

şey yapıyorum gibi geliyor bana Ama "IsolatedStorageFile"

public class ToDoItem 
    { 
     public string ToDoName { get; set; } // Add controle's enz. 
     public string ToDoDescription { get; set; } 
     internal Priority PriortiySelection { get; set; } 
... 
} 

Öğeler sınıfı (temel olarak bir sargı ile bazı ciddi sorunlar var clas yüzden kod Belows şu istisnaları döndürür

public class Items 
    { 
     public static List<ToDoItem> Itemslist = new List<ToDoItem>(); 
     public static List<ToDoItem> GetList() 

     static methods here.. 
    } 

) bunu erişebilirsiniz:

"yöntemi erişmek girişimi başarısız oldu: System.Io.streamreader..ctor (System.String)"

ve sonrasında i almak

Operasyonu izin verilmez IsolatedStorageFileStream

if (store.FileExists(@"items.std")) 
       { 

        ToDoItem item = new ToDoItem(); 
        try 
        { 
         IsolatedStorageFileStream save = new IsolatedStorageFileStream(@"items.std", FileMode.Open, store); 
         BinaryReader reader = new BinaryReader(save); 
        } 
        catch (Exception exc) 
        { 
         MessageBox.Show(exc.Message); 
        } 
Genel kısmi sınıfında 10

NewToDo: PhoneApplicationPage aşağıdaki yöntemi ekledim. Yukarıdaki istisnaları tekrar döndürürse, sadece bir nedenden ötürü izin verdiğimi veya büyük hatalar yaptığımı varsayardım.

private void saveItem(ToDoItem toDoItem) 
     { 
      try 
      { 
       using (StreamWriter sw = new StreamWriter(store.OpenFile(@"items.std", FileMode.Append))) 
       { 
        sw.WriteLine(toDoItem.ToDoName); 
        sw.WriteLine(toDoItem.ToDoDescription); 
        sw.WriteLine(toDoItem.PriortiySelection.ToString()); 
       } 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.Message); 
      } 

     } 

u hep bunu sağlamak için mutluyum fazla bilgiye ihtiyacınız olursa, Şu anda bir Belçika kolej ikinci yıl öğrenciyim ve ben pencere phone7 uygulamalarıyla etrafında oynuyorum.

cevap

1

aşağıdaki yalıtılmış depolama

using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    if (!store.FileExists(VIEW_MODEL_STORAGE_FILE)) 
    { 
     return result; 
    } 

    using (var isfs = new IsolatedStorageFileStream(VIEW_MODEL_STORAGE_FILE, FileMode.Open, store)) 
    { 
     using (var sr = new StreamReader(isfs)) 
     { 
      string lineOfData; 

      while ((lineOfData = sr.ReadLine()) != null) 
      { 
       result += lineOfData; 
      } 
     } 
    } 
} 

örneğin bir veri dizisi (result) oluşturur gelen bir dosyanın içeriğini okuyacaktır. Bu aslında aslında diğer nesnelerin bir koleksiyonudur serileştirilmiş bir nesnedir. Bu daha sonra tekrar koleksiyona geri gönderilebilir. Bu, bir seferde bir dosyaya özellik yazmakla uğraşmaya çalıştığınız için muhtemelen tercih edilir. Eğer ikinci kez bir kaynak erişmeye çalıştığınızda hala kullanımda olduğu için

using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    using (var isfs = new IsolatedStorageFileStream(VIEW_MODEL_STORAGE_FILE, FileMode.Create, store)) 
    { 
     using (var sw = new StreamWriter(isfs)) 
     { 
      sw.Write(serializedCollectionObject); 
      sw.Close(); 
     } 
    } 
} 
+0

Teşekkür orada şimdi depolamak ve benim nesne sert "serializedCollectionObject" olmadan olsun kaydetmek mümkün değilim, dostum bu çalışmıyor? Silverlight? Sonraki veri bilgileri. – Syneryx

1

o tüm tek kullanımlık nesneleri elden ve bir sorunla karşılaşmak değiliz mümkün mü:

İşte dosyası yazmak için nasıl ?

Kullanım bildirimi, bu işlemin kolayca gerçekleştirilebilmesi için iyi bir yoldur. Jm47 bu nedenle aynı hata iletisini başlamıştı Burada konuyla ilgili

Dispose with Using

Biraz daha fazla arka plan.

Problem opening a stream to an isolatedstorage image already the source on an image?

+0

Bu sorunu yaşadım - kodumun bir kısmı fileStream.Close() yöntemini çağırmayı unutmuştu, bu yüzden kodumun başka bir parçası dosyayı açmaya çalıştığında istisna oldu. (Web için Silverlight) – CodeThug