酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

WindowsストアアプリでFolderPickerを使ってフォルダ内のファイル一覧を取得する

Windows 8.1での挙動についてです。

Windowsストアアプリではユーザーの許可(選択)がないと、基本的にアプリからファイルシステムにアクセスすることができません。

例外としては、アプリ自身が管理するローカルフォルダ(ApplicationData.Current.LocalFolderで取得できるフォルダ)や機能宣言した特殊なフォルダ*1などがあります。

アプリケーションからアクセス可能なフォルダについては、Windowsデベロッパーセンターの「ファイル アクセスとアクセス許可 (Windows ランタイム アプリ)」をお読みください。

var picker = new FolderPicker()
{
    SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
    ViewMode = PickerViewMode.List,
};

// 拡張子を設定する
picker.FileTypeFilter.Add(".jpg");

// フォルダを選択する
var folder = await picker.PickSingleFolderAsync();

// フォルダに格納されているファイル一覧を取得する
var files = await folder.GetFilesAsync();

何故かファイルタイプを設定しておかないと例外が発生してしまいます。返ってきたStorageFolderオブジェクトのファイル一覧には指定した.jpg拡張子以外のファイルも含まれていてよくわからない実装です。

*1:例えばDocumentsフォルダにアクセスしたい場合はdocumentsLibraryを宣言する必要があるのと拡張子による制約も受ける