本エントリでは、アプリケーションからのデータ保存について紹介したいとおもいます。
WP7は、ファイルシステムが公開されておらず、
アプリケーションがデータを保存するには、分離ストレージを利用する必要があります。
分離ストレージとは、アプリケーション毎に使用できる仮想ストレージを持つ仕組みで、
分離ストレージ内は自由に使用することができます。
アプリケーションは他のアプリケーションの分離ストレージにアクセスすることはできません。
そのため、分離ストレージを使用すると他のアプリケーションからデータを保護することができ、
開発者はセキュリティに悩むことなく、アプリケーションデータをローカルに保存することができます。
本エントリでは、この分離ストレージをファイルシステムとして利用した
簡易メモアプリの作成方法を紹介します。
これまでに紹介した内容を利用していますので、以下を参考にどうぞ
- ・
- ・
TextBoxを使用して文字入力インターフェイスを作成する(WP7)
それでは続きをどうぞ。
分離ストレージを利用する
分離ストレージをファイルシステムとして使用するために、
以下表のIsolatedStorageFileクラスを利用します。
IsolatedStorageFileクラスのOpenFileメソッドの第二引数には、
ファイルの開き方、FileModeを指定する必要があります。
FileModeの一覧は以下表のとおりです。
※詳細なFileMode列挙体の解説は以下を参照ください
http://msdn.microsoft.com/ja-jp/library/system.io.filemode(v=VS.95).aspx
分離ストレージに書き込む
分離ストレージを利用するで紹介した、クラスとメソッドを利用し
分離ストレージにテキストデータを書き込みます。
書き込みの際は、常に新しく入力された情報を新規データとして扱いたい為
FileModeにはCreateを指定しています。(Line:9)
テキストデータのstreamへの書き込みには、
StreamWriterクラスのwriteメソッドを利用します。(Line:13)
// textデータを取得 string title = titleBox.Text; string text = textBox1.Text; // 分離ストレージを取得 IsolatedStorageFile isoStorage = IsolatedStorageFile.GetUserStoreForApplication(); // 分離ストレージからFileStreamを取得 IsolatedStorageFileStream stream = isoStorage.OpenFile(title, FileMode.Create); StreamWriter sw = new StreamWriter(stream, System.Text.Encoding.UTF8); // 書き込み sw.Write(text); // streamのclose sw.Close(); stream.Close();
それぞれのstreamのCloseを忘れないように気をつけましょう。
分離ストレージから読み出す
書き出し時と同様に、分離ストレージを利用するで紹介した、クラスとメソッドを利用して
分離ストレージからテキストファイルを読み込みます。
読み込み時には、既存ファイルのみを対象としたい為
FileModeにはOpenを指定しています。(Line:6)
FileModeにOpenを指定した場合、Fileが存在しないとIsolatedStorageExceptionが発生します。(Line:27)
本サンプルではExceptionの発生時に”File Not Found!!”を出力しています。(Line:29)
// textデータを取得 string title = titleBox.Text; string line = null; // 分離ストレージを取得 IsolatedStorageFile isoStorage = IsolatedStorageFile.GetUserStoreForApplication(); try { // 分離ストレージからFileStreamを取得 IsolatedStorageFileStream stream = isoStorage.OpenFile("ファイル名", FileMode.Open); StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8); //textBoxの内容をクリア textBox1.Text = ""; // 読み出し while ((line = sr.ReadLine()) != null) { textBox1.Text = textBox1.Text + line; } sr.Close(); stream.Close(); } catch (IsolatedStorageException ie) { textBox1.Text = "file not found!!"; }
サンプルソースコード
本エントリのサンプルアプリは、以下の画面構成をとります。
<Grid x:Name="LayoutRoot" Background="Transparent"> <TextBox Height="73" HorizontalAlignment="Left" Margin="12,43,0,0" Name="titleBox" Text="Title" VerticalAlignment="Top" Width="233" /> <TextBox Height="415" HorizontalAlignment="Left" Margin="12,105,0,0" Name="textBox1" Text="" VerticalAlignment="Top" Width="460" /> <Button Content="Save" Height="72" HorizontalAlignment="Left" Margin="338,44,0,0" Name="save_button" VerticalAlignment="Top" Width="130" Click="save_button_Click" /> <Button Content="Show" Height="72" HorizontalAlignment="Left" Margin="226,44,0,0" Name="show_button" VerticalAlignment="Top" Width="130" Click="show_button_Click" /> </Grid>
画面上部にTextBoxとButtonが二つ、下部にTextBoxが配置されています。
保存と読み出しの操作は以下のとおりです。
保存操作
1.上部のTextBoxにメモのタイトルを入力する
2.下部のTextBoxにメモの本文を入力する
3.saveボタンを押下する
読み出し操作
1.上部のTextBoxにメモのタイトルを入力する(保存済みのもの)
2.showボタンを押下する