私はnoteapp、2ページを持っています:
- MainPage.xaml —メモの作成。
- NoteList.xaml —メモのリスト。
メモはIsolatedStorageを使用して保存され、NoteList.xaml(リストボックス)に表示されますが、同じ名前のメモは保存されません。修正するにはどうすればよいですか?同じ名前(ただし内容が異なる)のメモを追加できるようにする必要があります。
ありがとう!
私はnoteapp、2ページを持っています:
メモはIsolatedStorageを使用して保存され、NoteList.xaml(リストボックス)に表示されますが、同じ名前のメモは保存されません。修正するにはどうすればよいですか?同じ名前(ただし内容が異なる)のメモを追加できるようにする必要があります。
ありがとう!
ファイル名としてノート名を使用していますか?もしそうなら...それをしないでください。各ファイルを一意の名前で保存します。これを行うには無数の方法があります。GUIDまたはタイムスタンプを使用するか、ファイル名の末尾にタイムスタンプを追加することができます。気になる場合は、すべてのメモを1つのフォーマットされたファイル(おそらくXML)に保存できます。
必要なのは、以下を使用せずに各メモを一意に識別する方法です。
a。ノートの名前
b。メモの内容
タイムスタンプを使用することは、現時点ではアプリケーションにとって意味があるかもしれませんが(ユーザーはおそらく、2つの異なるメモを同時に作成できないため)、タイムスタンプを使用して各メモを識別すると、たとえばサーバーを実装する場合に問題が発生する可能性があります。アプリケーションのサイドコンポーネント。アプリケーションのバージョン23(最初の数か月で明らかに数百万を売り上げる)で、ユーザーがメモで共同作業できるようにし、メモがたまたま正確に作成されたアプリの2つのインスタンス間で共有された場合はどうなりますか同時?あなたは問題を抱えているでしょう。
アプリケーション内の各ノートの一意の識別子を見つけるための合理的な解決策は、Guid.NewGuid
メソッドを使用することです。これは、ユーザーがメモを「保存」することを決定したとき(または、アプリがメモを作成した瞬間に保存する場合、または設定された間隔でメモを保存して瞬時に「ドラフト」できるようにする場合)に行う必要があります。
各ノートを一意に識別する方法を十分に決定したので、アプリケーションでユーザーが作成できるようになることに注意してください。そのデータをどのように保存するかを考える必要があります。
これを行うための優れた方法は、を使用するXmlSerializer
か、サードパーティのライブラリJson.Netを使用することです。ただし、簡単にするために、もう少し簡単なことを行うことをお勧めします。
より簡単な方法(適切なoleのプレーンテキストを使用)は次のようになります。
1:{Note.Name}
2:{Guid.ToString()}
3:{Note.Contents}
4:{Some delimiter}
IsolateStorageからファイルを読み取る場合、ファイルの先頭とファイル{Some delimiter}
の末尾の間の各「チャンク」を1つの「メモ」のデータと見なして、ファイルを1行ずつ読み取ります。
この形式にはいくつかの制限があることに注意してください。{Some delimiter}
主に、ユーザーがメモの内容の最後の部分を(任意に自由に定義できる)と等しくならないようにする必要があります。このためには、「## && ENDOFNOTE && ##」など、ユーザーが入力する可能性が低い文字列を使用すると便利な場合があります。ユーザーが入力する可能性が低い場合でも、確認する必要があります。必ずIsolatedStorageに保存する前に、ファイル形式が崩れるため、メモの最後にこの文字列が含まれていないことを確認してください。
動作する簡単なソリューションが必要な場合は、上記の方法を使用してください。スケーラブルな優れたソリューションが必要な場合は、JSONまたはXMLを使用して、自分に合ったファイル形式を見つけてください。JSONを調べることを強くお勧めします。その価値は、この孤立したシナリオよりもはるかに大きくなります。
私はIsolatedStorageにメモを書く必要がありました。私がしたことは彼らにファイルを作ることでした。IsolatedStorageFile
メモを書いた日付を書いてからメモします。リストボックスから、それらを2つの配列に格納します。次に、アプリを終了する前に、それらをファイルに書き込みます。
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();
}
}