2012-05-15 12 views
0

我有一個noteapp,兩頁:時遇到節約多個項目到獨立存儲

  1. MainPage.xaml中 - 創建筆記;
  2. NoteList.xaml - 筆記列表。

備忘錄由IsolatedStorage的方式保存,並出現在NoteList.xaml(列表框),但具有相同名稱的音符不存儲,如何解決呢? 我需要能夠添加具有相同名稱(但具有不同內容)的筆記。

謝謝!

+0

你是什麼意思的同名票據不存儲?也可以發佈一些相關的代碼(保存和檢索也許) – Prescott

回答

1

您使用的音符名作爲文件名?如果是的話......不要這樣做。用一個唯一的名稱保存每個文件。有很多方法可以做到這一點。您可以使用GUID或時間戳,或者可以將時間戳附加到文件名的末尾。如果你非常喜歡,你可以將所有的筆記存儲在一個格式化的文件中 - 也許是XML。

0

您需要的是一種獨特識別每個音符而不使用的方法:

a。該說明的名字

灣該筆記的內容

雖然使用時間戳可能對您的應用程序有意義(因爲用戶可能無法同時創建兩個不同的筆記),如果您想要使用時間戳識別每個筆記可能會導致問題在你的應用程序中實現...服務器端組件。如果在應用程序的第23版中(顯然在頭幾個月銷售數百萬)會發生什麼情況,您決定允許用戶在筆記上進行協作,並在您的應用程序的兩個實例之間共享註釋,這些實例恰好在EXACT中創建同時?你會遇到問題。

合理解決找到一個唯一的標識符用於在應用程序中的每個注是通過使用Guid.NewGuid方法。您應該在用戶決定「保存」筆記時執行此操作(或者您的應用程序在創建筆記時或者在某個設置的時間間隔內保存筆記以允許即時「草稿」。)

既然我們已經足夠確定一個唯一標識每個應用程序將允許用戶創建的方法注意,我們需要考慮應該如何存儲這些數據。

一個很好的方法是通過使用XmlSerializer或更好的方式使用第三方庫Json.Net。但爲了簡單起見,我建議做一些簡單的事情。

一個更簡單的方法(使用良好的ole'純文本)將是th Ë以下:

1:{Note.Name}
2:{Guid.ToString()}
3:{Note.Contents}
4:{Some delimiter}

當您閱讀從IsolatedStorage的文件中,可以通過行的文件行讀,考慮每個文件開始和每個{Some delimiter}之間的行的「塊」以及文件的結尾作爲一個「註釋」的數據。

請記住有這種格式的一些限制。主要的是,你必須讓用戶不要讓他們的筆記內容的最後部分等於{Some delimiter}(你可以自由任意定義btw)。爲此,使用用戶不太可能輸入的字符串可能會很有幫助,例如「## & & ENDOFNOTE &」& ##「無論用戶輸入密碼的可能性如何,您都需要在保存到IsolatedStorage之前檢查以確保Note的末尾不包含此字符串,因爲它會破壞您的文件格式。

如果你想要一個簡單的解決方案的工作,使用上述方法。如果您想要一個可擴展的解決方案,請使用JSON或XML並找出對您有意義的文件格式。我強烈建議你看看JSON,它的價值遠遠超過這種孤立的情況。

0

我曾經需要寫筆記給IsolatedStorage。我所做的就是將他們交給一個文件。 IsolatedStorageFile我寫了筆記的寫日期然後記下。從列表框中我將它們存儲到兩個數組中。然後在退出應用程序之前,將它們寫入文件。

  try 
      { 
       using (IsolatedStorageFile storagefile = IsolatedStorageFile.GetUserStoreForApplication()) 
       { 
        if (storagefile.FileExists("NotesFile")) 
        { 
         using (IsolatedStorageFileStream fileStream = storagefile.OpenFile("NotesFile", FileMode.Open, FileAccess.ReadWrite)) 
         { 
          StreamWriter writer = new StreamWriter(fileStream); 

          for (int i = 0; i < m_noteCount; i++) 
          { 
           //writer.Write(m_arrNoteDate[i].ToShortDateString()); 
           writer.Write(m_arrNoteDate[i].ToString("d", CultureInfo.InvariantCulture)); 
           writer.Write(" "); 
           writer.Write(m_arrNoteString[i]); 
           writer.WriteLine("~`"); 
          } 
          writer.Close(); 
         } 
        }