0

我有一个noteapp,两页:

  1. MainPage.xaml — 创建笔记;
  2. NoteList.xaml — 笔记列表。

笔记通过IsolatedStorage保存,出现在NoteList.xaml(listbox)中,但没有保存同名笔记,如何解决?我需要能够添加具有相同名称(但内容不同)的注释。

谢谢!

4

3 回答 3

1

您是否使用注释名称作为文件名?如果是这样...不要那样做。用唯一的名称保存每个文件。有无数种方法可以做到这一点。您可以使用 GUID 或时间戳,也可以将时间戳附加到文件名的末尾。如果您愿意,您可以将所有笔记存储在一个单一格式的文件中——也许是 XML。

于 2012-05-16T03:27:16.727 回答
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();
                        }
                    }
于 2012-05-16T05:17:35.700 回答
0

您需要的是一种无需使用即可唯一识别每个音符的方法:

一个。笔记的名称

湾。笔记的内容

虽然现在使用时间戳可能对您的应用程序有意义(因为用户可能无法同时创建两个不同的笔记),但如果您想实现说......服务器,使用时间戳来识别每个笔记可能会导致问题应用程序的侧组件。如果在您的应用程序的第 23 版(前几个月显然销售数百万)中,您决定允许用户在便笺上进行协作,并且在您的应用程序的两个实例之间共享一个便笺,它们恰好是在 EXACT 中创建的同时?你会有问题。

为应用程序中的每个 Note 找到唯一标识符的合理解决方案是使用该Guid.NewGuid方法。当用户决定“保存”笔记时(或者如果您的应用程序在创建笔记时保存笔记,或者在某个设定的时间间隔以允许即时“草稿”),您应该这样做。

既然我们已经充分确定了一种唯一标识您的应用程序将允许用户创建的每个 Note 的方法,我们需要考虑应该如何存储这些数据。

一个很好的方法是通过使用XmlSerializer,或者更好的是使用第三方库Json.Net。但为了简单起见,我建议做一些更简单的事情。

一个更简单的方法(使用好的 ole' 纯文本)如下:

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

当您从 IsolatedStorage 读取文件时,您将逐行读取文件,将文件开头和文件末尾之间的每一行“块”视为{Some delimiter}一个“注释”的数据。

请记住,这种格式有一些限制。主要是,您必须防止用户让他们的笔记内容的最后一部分等于{Some delimiter}(您可以随意定义 btw)。为此,使用用户不太可能输入的字符串可能会有所帮助,例如“##&&ENDOFNOTE&&##”无论用户输入的可能性有多大,您都需要检查以使在保存到 IsolatedStorage 之前,请确保 Note 的末尾不包含此字符串,因为它会破坏您的文件格式。

如果您想要一个有效的简单解决方案,请使用上述方法。如果您想要一个可扩展的良好解决方案,请使用 JSON 或 XML 并找出对您有意义的文件格式。我强烈建议您研究 JSON,它的价值远远超出这种孤立的场景。

于 2012-05-16T04:48:52.610 回答