我有一个noteapp,两页:
Notes通过IsolatedStorage保存,并出现在NoteList.xaml(列表框)中,但是没有存储具有相同名称的注释,如何修复它? 我需要能够添加具有相同名称的注释(但内容不同)。
谢谢!
答案 0 :(得分:1)
您是否使用备注名称作为文件名?如果是这样的话......不要这样做。使用唯一名称保存每个文件。有很多方法可以做到这一点。您可以使用GUID或时间戳,也可以在文件名末尾附加时间戳。如果你如此倾向,你可以将所有笔记存储在一个格式化的文件中 - 也许是XML。
答案 1 :(得分:0)
您需要的是一种不使用以下方式唯一标识每个音符的方法:
一个。注释的名称
湾笔记的内容
虽然使用时间戳可能对您的应用程序现在有意义(因为用户可能无法同时创建两个不同的注释),但如果您想要实现说明,使用时间戳来识别每个注释可能会导致问题。 。应用程序的服务器端组件。如果在您的应用程序的第23版(显然在前几个月销售数百万)中会发生什么,您决定允许用户在笔记上进行协作,并且在您的应用的两个实例之间共享一个注释,它们恰好在EXACT中创建同时?你有问题。
在应用程序中为每个Note找到唯一标识符的合理解决方案是使用Guid.NewGuid
方法。当用户决定“保存”笔记时(或者如果您的应用程序在创建笔记时保存笔记,或者在某个设定的时间间隔内允许即时“草稿”),您应该这样做。
现在我们已经充分确定了一种唯一标识应用程序允许用户创建的每个Note的方法,我们需要考虑应该如何存储这些数据。
执行此操作的一个好方法是使用XmlSerializer
,或者更好地使用第三方库Json.Net。但为了简单起见,我建议做一些更容易的事情。
一个更简单的方法(使用好的'纯文本')如下:
1:{Note.Name}
2:{Guid.ToString()}
3:{Note.Contents}
4:{Some delimiter}
当您从IsolatedStorage读取文件时,您将逐行读取文件,考虑文件开头和每个{Some delimiter}
之间的每行“块”以及文件的结尾一个“注”的数据。
请注意,此格式存在一些限制。主要是,你必须让用户不要让他们的笔记内容的最后一部分等于{Some delimiter}
(你可以任意定义btw)。为此,使用用户不太可能输入的字符串可能会有所帮助,例如“##&& ENDOFNOTE&& ##”无论用户输入的字符多么不可能。 ,您需要检查以确保在保存到IsolatedStorage之前Note的末尾不包含此字符串,因为它会破坏您的文件格式。
如果您希望简单解决方案有效,请使用上述方法。如果您想要一个可扩展的良好解决方案,请使用JSON或XML并找出对您有意义的文件格式。我非常鼓励你研究JSON,它的价值远远超过了这个孤立的场景。
答案 2 :(得分: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();
}
}