2010-11-20 10 views
2

Windows Phone 7 App Das Ziel der Anwendung ist eine einfache Aufgabenliste. Ich habe eine Klasse 'Toditem' Ich füge diese Objekte zum Items-Objekt hinzu.Silverlight, Last speichern, IsolatedStorageFile und IsolatedStorageFileStream. Ausnahmen

es scheint mir, ich mache etwas wirklich kompliziert und sehr wahrscheinlich nicht sauber oder anständige Code

Aber ich habe einige ernsthafte Probleme mit „IsolatedStorageFile“

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

Artikel Klasse (basicly Wrapper cla, so kann ich es acces)

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

     static methods here.. 
    } 

Der Code Belows folgende Ausnahmen gibt:

"Versuch, die Methode für den Zugriff fehlgeschlagen: System.Io.streamreader..ctor (System.String)"

und ich bekomme danach

Betrieb nicht zulässig auf 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); 
        } 

in öffentlichen Teilklasse NewToDo: PhoneApplicationPage Ich habe die folgende Methode hinzugefügt. wich die oben genannten ausnahmen wieder zurück, nehme ich nur an, dass es aus irgendeinem grund erlaubt oder ich mache einige große fehler.

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); 
      } 

     } 

Sollten u mehr Informationen benötigen Ich bin immer froh, es zu schaffen, ich bin derzeit Student an einem College Belgien zweiten Jahr und ich spiele um mit Fenstern phone7 apps.

Antwort

1

Nachfolgend wird

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; 
      } 
     } 
    } 
} 

Das Beispiel baut eine Reihe von Daten (result) den Inhalt einer Datei aus isolierten Speicher lesen. Dies ist eigentlich ein serialisiertes Objekt, das eigentlich eine Sammlung anderer Objekte ist. Dies kann dann wieder in die Sammlung deserialisiert werden. Dies ist wahrscheinlich besser als das, was Sie versuchten, indem Sie nacheinander Eigenschaften in eine Datei schreiben.

Hier ist, wie die Datei zu schreiben:

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

Dank dort paaren, ich bin jetzt in der Lage mein Objekt, um es hart zu speichern und zu speichern, ohne „serializedCollectionObject“ dies nicht funktioniert? in Silberlicht? Weiter oben Detailinformationen. – Syneryx

1

Ist es möglich, Sie nicht alle Ihre Wegwerf-Objekte Entsorgung und Begegnung ein Problem, wenn Sie versuchen, eine Ressource für ein zweites Mal zugreifen, da sie noch in Gebrauch ist ?

Die using-Anweisung ist ein guter Weg, dies leicht zu handhaben, mehr dazu hier.

Dispose with Using

Ein bisschen mehr Hintergrund auf dem Thema hier, wo Jm47 wurde aus diesem Grunde die gleiche Fehlermeldung bekommen.

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

+0

Ich hatte dieses Problem - ein Teil meines Codes hatte vergessen, fileStream.Close() aufzurufen, also später, als ein anderer Teil meines Codes versuchte, die Datei zu öffnen, bekam es die Ausnahme. (Silverlight für das Web) – CodeThug

Verwandte Themen