ローカルファイルシステムへのアクセス
信頼されたアプリケーションでは、一部のユーザーフォルダーであれば、ユーザーとの対話なしにファイルの読み書きを行うことができるようになりました。
ファイルダイアログを利用したファイルへのアクセス
通常、Silverlightで分離ストレージ以外のファイルにアクセスする場合は、SaveFileDialogクラスやOpenFileDialogクラスを利用して、ユーザーが選択したファイルのストリームに対してプログラミングを行う必要があります。
リスト6 は、画面のボタンがクリックされたタイミングでファイルの保存ダイアログを表示し、ユーザーが選択したファイルにテキストボックスの内容を書き込んでいるサンプルです。
private void SaveFromDialog(object sender, RoutedEventArgs e) { var saveDialog = new SaveFileDialog() { DefaultExt = "txt", Filter = "テキストファイル(*.txt)|*.txt" }; if (saveDialog.ShowDialog() == true) { using (var stream = new StreamWriter(saveDialog.OpenFile())) { stream.Write(inputText.Text); stream.Close(); } MessageBox.Show(string.Format("{0}に保存しました。", saveDialog.SafeFileName)); } }
保存ボタンを押すと、図6のようなダイアログが表示され、ユーザーが選択したファイルにプログラムからアクセスできるようになります。ここではデスクトップのhote.txtというファイルに、テキストボックスの内容を保存しています。
信頼されたアプリケーションによるファイルの操作
Silverlight4 では、System.IO名前空間の、FileクラスやPathクラスと行ったおなじみのクラスを利用してローカルファイルシステムにアクセスできます。
リスト8 にユーザーのドキュメントフォルダーにテキストボックスの内容を保存する例を示します。
var filePath = System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Hoge.txt"); if (File.Exists(filePath)) { File.Delete(filePath); } File.WriteAllText(filePath, inputText.Text, System.Text.Encoding.UTF8);
ユーザーとの対話を行わない場合、信頼されたアプリケーションからは、EnvironmentクラスのGetFolderPathメソッドを利用することで、ユーザーのドキュメントフォルダ(MyDocuments)、ミュージックフォルダ(MyMusic)、ピクチャフォルダ、ビデオフォルダ(MyVideos)の4つのフォルダにアクセスできます。
GetFolderPathメソッドに上記以外のフォルダを指定したり、WriteAllTextメソッドに直接C:\Demo\hoge.txtなどといったパスを指定した場合、SecurityExceptionの例外が発生するので注意してください。
特に、SpecialFolder列挙体には、デスクトップ(Desktop)なども列挙されますが、アクセス可能なのはあくまで上記の4フォルダーだけです。
これらのフォルダー以外にファイルを保存する場合は、依然としてリスト7のファイルダイアログを利用し、ユーザーとの対話を伴うファイルアクセスが必要となります。
まとめ
今回は、Silverlight 4で追加されたブラウザー外実行の新機能のうち、ネイティブ統合以外の部分にフォーカスを当てて解説を行いました。信頼されたアプリケーションは、Silverlight 4の目玉といえる機能の1つです。
特に、次回解説するネイティブ統合は飛び抜けた機能を提供しますが、多くの機能がユーザーとの対話することなく利用できるというのも、企業向けのアプリケーションを作成する上では必須の機能になるはずです。
次回は、信頼されたアプリケーションのネイティブ統合と、証明証の発行や管理API、セキュリティといった部分に触れていきます。