分離ストレージにテキストデータを保存する


本エントリでは、アプリケーションからのデータ保存について紹介したいとおもいます。
WP7は、ファイルシステムが公開されておらず、
アプリケーションがデータを保存するには、分離ストレージを利用する必要があります。

分離ストレージとは、アプリケーション毎に使用できる仮想ストレージを持つ仕組みで、
分離ストレージ内は自由に使用することができます。

アプリケーションは他のアプリケーションの分離ストレージにアクセスすることはできません
そのため、分離ストレージを使用すると他のアプリケーションからデータを保護することができ、
開発者はセキュリティに悩むことなく、アプリケーションデータをローカルに保存することができます。

本エントリでは、この分離ストレージをファイルシステムとして利用した
簡易メモアプリの作成方法を紹介します。

これまでに紹介した内容を利用していますので、以下を参考にどうぞ

イベント処理を実装する(WP7)

TextBoxを使用して文字入力インターフェイスを作成する(WP7)

それでは続きをどうぞ。

分離ストレージを利用する

分離ストレージをファイルシステムとして使用するために、
以下表のIsolatedStorageFileクラスを利用します。

[table “160” not found /]

IsolatedStorageFileクラスOpenFileメソッドの第二引数には、
ファイルの開き方、FileModeを指定する必要があります。
FileModeの一覧は以下表のとおりです。

[table “161” not found /]

※詳細な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ボタンを押下する

One Comment