ファイルの読み書き〜セキュリティ優先設計UWPアプリの開発を始めると、「なぜこんなに不便なんだろう!?」ときっと思うはずだ。ここではファイルアクセスについて取り上げるが、その他にも印刷プレビューを出さないと印刷できないとか、他のプロセスと自由に通信できないといった、(Windowsフォームでの開発から見ると)さまざまな制約がある。アプリを提供する」を参照)。そのため上に述べたようなさまざまな制約が課せられているのである。UWPアプリでは、エンドユーザーのプライバシーやセキュリティを優先する設計を考えねばならない。例として、フォルダーの中のファイルを一覧するコードをWindowsフォームとUWPアプリとで紹介しよう。Windowsフォームでのファイル一覧Windowsフォームでは(というよりも従来のデスクトップ用プログラムでは)、実行時にプログラムに与えられている権限でアクセス可能な範疇であれば、任意のフォルダーやファイルにアクセスできる。ユーザーの「ピクチャ」フォルダーに格納されているファイルの一覧を取得してリストボックスに表示するコードは、次のように書ける(別途公開のサンプルでは、「S4_FileIO」ディレクトリの下にある「S4_01_WinForm」プロジェクト)。System.IO.Path.GetFileName(p)).ToList();Windowsフォームでファイルの一覧を取得するコードの例(コードビハインド、C#)フォームには「listBox1」という名前のListBoxコントロールを配置しておく。ここではAPIを使ってフォルダーのフルパスを取得したが、実行中の権限でアクセスできるフォルダーであれば、任意のフォルダーのファイルを同様にして取り出せる。UWPアプリで「ピクチャ」フォルダーにアクセスするUWPアプリでのファイルアクセスはかなり制限されている。自由に読み書きできるのは、アプリごとに与えられた「アプリケーションデータ記憶域」と呼ばれる領域のみだ。その他に、「ピクチャ」フォルダーなどのいくつかのフォルダーは、マニフェストに宣言することでアクセスできるようになる。それ以外の任意のフォルダーにアクセスするには、ファイルピッカーやフォルダーピッカーなどを利用してエンドユーザーに選択してもらわねばならない。「ピクチャ」フォルダーのファイル一覧を取得する方法を紹介しよう(別途公開のサンプルでは、「S4_FileIO」ディレクトリの下にある「S4_02_Uwp」プロジェクト)。最初に、マニフェストでそのことを宣言しなければならない(宣言していないと実行時に例外になる)。ソリューションエクスプローラーで「Package.appxmanifest」ファイルをダブルクリックして、マニフェストエディターを開く(次の画像)。ライブラリ]にチェックを付ける。ライブラリ]にチェックを付ける(赤枠内)。(クライアント)]には、既定でチェックが付いている。このようにして[機能]タブで設定した機能がアプリから利用できるようになるが、Windowsストアではアプリの追加情報欄にその機能が表示される。エンドユーザーがそのアプリをインストールするかどうかの判断材料に使われるのである。従って、一見するとアプリとは関係なさそうに思えるような機能を使うときは、その理由をアプリの説明に書いておくのがよいだろう。したら、次のようなコードを書く。ここではボタンのクリックイベントハンドラーに記述した。fileNames)_fileNames.Add(fileName);}UWPアプリでファイルの一覧を取得するコードの例(コードビハインド、C#)ページにはListBoxコントロールを配置し、そのItemsSourceプロパティとこのコードにある「_fileNames」メンバー変数をバインドしておく。Buttonコントロールを配置し、そのクリックイベントのハンドラーとして「button1_Click」メソッドを指定しておく。得られたフォルダーやファイルは文字列ではなく、Windows.Storage名前空間のStorageFolderオブジェクト/StorageFileオブジェクトであることに注意。これらのオブジェクトを直接作ることはできない(コンストラクターがprivateになっている)。ファイルやフォルダーのパス文字列を与えて作ることもできない。取得したStorageFolderオブジェクト/StorageFileオブジェクトからパス文字列を得ることはできる。ファイルの一覧を取得するところにawaitキーワードが登場しており、メソッドのシグネチャにはasyncキーワードが追加してあることにも注意してほしい。前述したように、ファイルアクセスのAPIには非同期処理のものが多いのである。UWPアプリで任意のフォルダーにアクセスする次に、任意のフォルダーにアクセスするためエンドユーザーに選択してもらう方法を紹介しよう(別途公開のサンプルでは、同じく「S4_FileIO」ディレクトリの下にある「S4_02_Uwp」プロジェクト)。それには、Windows.Storage.Pickers名前空間のFolderPickerクラスを使う。FolderPickerクラスを使うときには、マニフェストでの宣言は要らない。従って、次のようなコードを書くだけでよい。ここではボタンのクリックイベントハンドラーに記述した。fileNames)_fileNames.Add(fileName);}UWPアプリでファイルの一覧を取得するコードの例(コードビハインド、C#)ページにはListBoxコントロールを配置し、そのItemsSourceプロパティとこのコードにある「_fileNames」メンバー変数をバインドしておく。Buttonコントロールを配置し、そのクリックイベントのハンドラーとして「button2_Click」メソッドを指定しておく。このコードを実行してみると次の画像のようになる。UWPアプリでローカルリソースにアクセスするには、このようにエンドユーザーの操作が要求されるかマニフェストでの宣言が必要なると覚えておいてほしい。ファイルアクセスについてさらに詳しく!UWPアプリでのファイルアクセスについては、次の記事をご覧いただきたい。10のUWPアプリでも基本は同じだ。入力されたデータを保存するなお、エンドユーザーに選択してもらったファイル/フォルダーは、次からはコードから直接開くことも可能である。次の記事を参照してほしい。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。