連載
続・無償環境でSilverlight 2アプリを開発しよう!

第3回 ファイルを利用するSilverlightアプリを作ろう

シグマコンサルティング 菅原 英治
2009/06/09
Page1 Page2

コードビハインド側コードのポイント

 Silverlight 2アプリの実装は、XAMLで記述する画面のコードと、C#やVisual Basicで記述するコードビハインドのコードに大きく分かれます。今回、画面(XAML)のコードは、特に難しくないので解説しません。これまでの本連載の内容を理解していただければ、特に述べることはありません。

 従って、ここではコードビハインド側のみにポイントを絞って解説します。今回もあらかじめ用意したソースをダウンロードしていただき、そのポイントについて解説します。分離ストレージ(Isolated Storage)と呼ばれるデータの保存環境(データ保存の仕組み)をSilverlightアプリでどのように利用するかが中心となります。

 【サンプルのソース】

 ソースは、Visual Web Developer 2008 Express Edition(以下、VWD 2008)用のソリューションです。(VWD 2008のインストール方法については、「Silverlight 2アプリを開発しよう!後編」をご参照ください)。

[保存]ボタンを押したときの処理

 まずは、[保存]ボタンを押したときの処理について解説しましょう。次のコードをご覧ください。

' [保存]ボタン・クリック時のイベント・ハンドラ
Private Sub buttonSave_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
  Try
    ' 分離ストレージ(の__LocalSettings設定ファイル)に保存する
    IsolatedStorageSettings.ApplicationSettings("SimpleMemo") = Me.textBoxBody.Text
    IsolatedStorageSettings.ApplicationSettings.Save()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  End Try
End Sub
// [保存]ボタン・クリック時のイベント・ハンドラ
private void buttonSave_Click(object sender, RoutedEventArgs e)
{
  try
  {
    // 分離ストレージ(の__LocalSettings設定ファイル)に保存する
    IsolatedStorageSettings.ApplicationSettings["SimpleMemo"] = this.textBoxBody.Text;
    IsolatedStorageSettings.ApplicationSettings.Save();
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message);
  }
}
[保存]ボタンを押したときの処理(上:Page.xaml.vb、下:Page.xaml.cs)

 まず最大のポイントは、太字で示された「IsolatedStorageSettings.ApplicationSettings」を利用している個所です。たったこの2行で、テキストボックスに入力した文字を保存することができます。

 読者の中には、「どこに保存できたのか」と疑問に思われた方もいるかもしれません。その保存先が、分離ストレージと呼ばれるデータの保存環境(=データ保存の仕組み)です。

分離ストレージ

 それでは、分離ストレージについて簡単に説明します。分離ストレージとは、.NET Frameworkにもともと(1.0のころから)ある仮想のファイル・システムで、そこにファイルやフォルダを作成することができます。

 特にSilverlightに対しては、分離ストレージAPIの簡易版(=.NET Frameworkのサブセット)が用意されています。サブセットではありますが、一部ではSilverlight用の新しいAPIも用意されています。

 本稿のサンプルで利用したIsolatedStorageSettingsクラスは、まさにSilverlight向けに用意された新しいAPIです。上述のコードで示したとおり、分離ストレージを非常に簡単に利用できるようになっています。

 ところで、先ほど分離ストレージを「仮想のファイル システム」と述べましたが、仮想といいつつも実際にはPC上のローカル・フォルダにそのファイルが存在します。具体的は次のパスに保存されています。

OS パス
Windows Vista %SystemDrive%\Users\<ユーザー名>\AppData\LocalLow\Microsoft\Silverlight\is
Windows XP %SystemDrive%\Documents and Settings\<ユーザー名>\Local Settings\Application Data\Microsoft\Silverlight\is
Mac OS X /Users/<ユーザー名>/Library/Application Support/Microsoft/Silverlight/is
分離ストレージが配置されているローカル・フォルダの物理パス
<ユーザー名>までのパスに対応する環境変数は「%UserProfile%」。

 IsolatedStorageSettingsクラスを利用して保存した情報は、上記のパス内に__LocalSettingsというファイル名で保存されています。実際には、ファイルとして保存されている、ということに注意してください。

 また保存される情報は、特に暗号化されません。そのため、機密情報は分離ストレージ上に保存しない方がよいでしょう。どうしても保存したい場合は、暗号化して保存するべきです。

 分離ストレージについては以上です。分離ストレージに関して、より詳しい情報が次のページにあります。併せてご参照ください。

[読出]ボタンを押したときの処理

 続いて[読出]ボタンを押したときの処理を解説します。次のコードをご覧ください。

' [読出]ボタン・クリック時のイベント・ハンドラ
Private Sub buttonLoad_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
  Try
    ' 分離ストレージ(の__LocalSettings設定ファイル)から読出す
    Me.textBoxBody.Text = _
      IsolatedStorageSettings.ApplicationSettings("SimpleMemo").ToString()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  End Try
End Sub
// [読出]ボタン・クリック時のイベント・ハンドラ
private void buttonLoad_Click(object sender, RoutedEventArgs e)
{
  try
  {
    // 分離ストレージ(の__LocalSettings設定ファイル)から読出す
    this.textBoxBody.Text =
      IsolatedStorageSettings.ApplicationSettings["SimpleMemo"].ToString();
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message);
  }
}
[読出]ボタンを押したときの処理(上:Page.xaml.vb、下:Page.xaml.cs)

 こちらでも太字で示された「IsolatedStorageSettings.ApplicationSettings」を利用しています。読み出す際には、保存するときに指定した「SimpleMemo」というキー名で取得します。このように読み出しも簡単です。

 また、分離ストレージを利用する際には、常に例外が発生することを意識したコーディングが必要になります。その理由は、繰り返しになりますが、ユーザーがいつでも分離ストレージを無効にできるからです。機能を無効にする以外にも、分離ストレージ内のファイルをユーザーが故意に消すことも可能です。従って、分離ストレージを利用する際には、常に例外が発生する、と想定することが重要です。

 本稿のサンプルにおいて、保存時、読み出し時に例外を捕捉しているのはそのためです。

 コードビハインド側のポイントは以上です。分離ストレージを利用し、非常に簡単にファイルを利用できることが分かっていただけましたでしょうか。

 今回はIsolatedStorageSettingsクラスによる分離ストレージ上の設定ファイルを利用しましたが、前述したとおり、独自のファイルやフォルダを作成して利用することもできます。これにはIsolatedStorageFileクラスを活用しますが、詳しくは前述の.NET TIPSやMSDNの記事が参考になるでしょう。また「リッチクライアント & 帳票:Silverlight 2で落書きアプリを作るための5つのテク 【5】落書きをローカルPC上に保存するには?」も参考にしてみてください。

まとめ

 それではまとめです。今回はファイルを利用するSilverlight 2アプリの開発方法について解説しました。

 今回のサンプルは、シンプルなメモ帳アプリでした。サンプルでは、テキストボックスに入力した文字を保存でき、一度ブラウザを閉じた後でも再度読み出すことができました。

 このサンプルで、保存、読み出し機能を実現していたのが、分離ストレージ(Isolated Storage)と呼ばれるデータの保存環境でした。

 Silverlightにおける分離ストレージは、簡易APIによるサブセットという位置付けですが、Silverlight用に一部新しいAPIも提供されていました。本稿のサンプルではそれを利用し、簡単にファイルを利用する機能を実現しました。また、分離ストレージを利用する際には、常に例外が発生することに注意する必要があることも述べました。

 本連載は今回が最終回となります。それでは、さようなら。End of Article

 

 INDEX
  連載:続・無償環境でSilverlight 2アプリを開発しよう!
  第3回 ファイルを利用するSilverlightアプリを作ろう
    1.Silverlightアプリでの情報の永続化の考察
  2.コードビハインド側コードのポイント

インデックス・ページヘ  「続・無償環境でSilverlight 2アプリを開発しよう!」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH