Windows8で、ユーザ/Picturesにあるファイルを扱ったときのメモ

だらけきった夏休みの最後にWindowsRTアプリ?を作ろうとした。
asyncとかawaitとか初めて見てビビったり、MessageBoxがMessageDialogになってるーとか思いつつ英語のリファレンスを読みながらやった。

最初は今まで通り.Netで作れると思ってたが、そういえばWindowsRTアプリは.NetでなくWinRT APIだったことを思い出して挫けかけてた。

ちょっと躓いて英語を読んだところを3つメモ

ピクチャにある写真を月ごとにグループ分けする

// class.Windows.Storage.KnownFolders.PictureLibrary でピクチャのフォルダ内を参照できる
StorageFolder picFolder = KnownFolders.PicturesLibrary;

// 写真の保存された月ごとにファイルをわける
// ピクチャ内のいろんなフォルダに位置していてもわけてくれる
StorageFolderQueryResult picResult = 
    picFolder.CreateFolderQuery(CommonFolderQuery.GroupByMonth);

// あとはForeachで月わけにした写真を扱った

取得するファイルをフィルタリングする

// オプションを設定し、クエリを実行するときの引数として与える
QueryOptions option = new QueryOptions(CommonFolderQuery.GroupByMonth);
    option.FileTypeFilter.Add(".jpg");
    option.FileTypeFilter.Add(".png");
    option.FileTypeFilter.Add(".gif");
    option.FileTypeFilter.Add(".bmp");
StorageFolder picFolder = KnownFolders.PicturesLibrary;
StorageFolderQueryResult picResult = 
    picFolder.CreateFolderQueryWithOptions(option);
IReadOnlyList<StorageFolder> picList =
     await picResult.GetFoldersAsync();

アプリ以下に位置してない画像を表示する

// アプリ以下に位置してない画像ファイル
StorageFile localFile;
BitmapImage image = new BitmapImage();
// 読み込みのみで開く
using (var stream = (FileRandomAccessStream)await 
    localfile.OpenAsync(FileAccessMode.Read))
{
// ImageSourceとして渡したりした
image.SetSource(stream);
}