ピッカーでファイルやフォルダーを開く

重要な API

ユーザーがピッカーを操作してファイルやフォルダーにアクセスできるようにします。 ファイルへのアクセスには FileOpenPicker クラスと FileSavePicker クラス、フォルダーへのアクセスには FolderPicker を使います。

Note

 完全なサンプルについては、「File picker sample」 (ファイル ピッカーのサンプル) を参照してください。

Note

デスクトップ アプリ (WinUI 3 アプリを含む) では、Windows.Storage.Pickers のファイルピッカーおよびフォルダー ピッカーを使用できます。 ただし、これらの API は昇格されたアプリで使用できるように設計されていないため、デスクトップ アプリを実行するために昇格が必要である場合は、別のアプローチが必要になります。 例については、「FileSavePicker」を参照してください。

前提条件

ファイル ピッカーの UI

ファイル ピッカーには、ユーザーを指示する情報やユーザーがファイルを開くまたは保存するときの一貫したエクスペリエンスを提供する情報が表示されます。

次の情報が含まれます。

  • 現在の場所
  • ユーザーが選んだ項目
  • ユーザーが参照できる場所のツリー。 これらの場所には、ファイル システム上の場所 (音楽フォルダーやダウンロード フォルダーなど) のほか、ファイル ピッカー コントラクトを実装するアプリ (カメラ、フォト、Microsoft OneDrive など) も含まれます。

メール アプリで添付ファイルを選ぶ機能にファイル ピッカーが表示される場合もあります。

2 つのファイルが開く対象として選ばれているファイル ピッカー。

ピッカーのしくみ

アプリでは、ファイル ピッカーを使ってユーザーのシステム上のファイルとフォルダーにアクセスします。 アプリではこれらの選択を StorageFile オブジェクトと StorageFolder オブジェクトとして受け取ることにより、それらを操作できます。

ピッカーは単一の統一されたインターフェイスを使用して、ユーザーがファイル システムや他のアプリからファイルやフォルダーを選べるように表示します。 他のアプリから選ばれたファイルは、ファイル システムから選ばれたファイルと同様に、StorageFile オブジェクトとして返されます。 通常、アプリはそれらのオブジェクトも、他のオブジェクトと同じ方法で操作できます。 他のアプリは、ファイル ピッカー コントラクトに参加することで、ユーザーにファイルを表示します。 ファイル、保存場所、またはファイルの更新を他のアプリに提供する場合は、「ファイル ピッカー コントラクトとの統合」をご覧ください。

たとえば、ユーザーがファイルを開けるように、アプリでファイル ピッカーを呼び出すとします。 この場合、アプリは呼び出し元アプリになります。 ファイル ピッカーは、システムや他のアプリと情報をやり取りして、ユーザーがファイルを探して選べるようにします。 ユーザーがファイルを選ぶと、ファイル ピッカーはそのファイルをアプリに返します。 ここでは、ユーザーが OneDrive のような提供元アプリからファイルを選ぶ場合のプロセスを示しています。

ファイル ピッカーを 2 つのアプリの間のインターフェイスとして使って、一方のアプリのファイルをもう一方のアプリから開くプロセスを示す図。

1 つのファイルを選ぶ: 完全なコード

var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");

Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
    // Application now has read/write access to the picked file
    this.textBlock.Text = "Picked photo: " + file.Name;
}
else
{
    this.textBlock.Text = "Operation cancelled.";
}

1 つのファイルを選ぶ: ステップ バイ ステップ

ファイル ピッカーが動作するには、ファイル ピッカー オブジェクトを作成してカスタマイズし、ユーザーが項目を選べるようにそのファイル ピッカーを表示する必要があります。

  1. FileOpenPicker を作成してカスタマイズする

    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
    picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
    picker.FileTypeFilter.Add(".jpg");
    picker.FileTypeFilter.Add(".jpeg");
    picker.FileTypeFilter.Add(".png");
    

    ファイル ピッカー オブジェクトの、ユーザーとアプリに関連するプロパティを設定します。

    この例では、ViewModeSuggestedStartLocation、および FileTypeFilter という 3 つのプロパティを設定して、ユーザーが画像ファイルを選べる視覚的に優れた表示を作成し、使いやすい場所に配置します。

    • ViewModePickerViewMode Thumbnail 列挙値に設定すると、ファイル ピッカーでファイルを表すために画像のサムネイルを使用して、視覚的に優れた表示が作成されます。 これは、画像やビデオなどの視覚的なファイルを選ぶ場合に設定します。 それ以外の場合は、PickerViewMode.List を使います。 画像またはビデオの添付機能とドキュメントの添付機能がある架空のメール アプリでは、ファイル ピッカーを表示する前に ViewMode をそれらの機能に対応させます。

    • PickerLocationId.PicturesLibrary を使って SuggestedStartLocation を Pictures に設定すると、画像を見つけられる可能性が高い場所が最初に表示されます。 選ぶファイルの種類 (音楽、画像、ビデオ、ドキュメントなど) に合わせて SuggestedStartLocation を設定します。 ユーザーは、開始場所から別の場所に移動できます。

    • FileTypeFilter を使うと、関連性の高いファイルの種類に絞ってユーザーがファイルを選ぶことができます。 FileTypeFilter の以前のファイルの種類を新しいエントリに置き換えるには、Add ではなく ReplaceAll メソッドを使います。

  2. FileOpenPicker を表示する

    • 単一のファイルを選ぶには

      Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
      if (file != null)
      {
          // Application now has read/write access to the picked file
          this.textBlock.Text = "Picked photo: " + file.Name;
      }
      else
      {
          this.textBlock.Text = "Operation cancelled.";
      }
      
    • 複数のファイルを選ぶには

      var files = await picker.PickMultipleFilesAsync();
      if (files.Count > 0)
      {
          StringBuilder output = new StringBuilder("Picked files:\n");
      
          // Application now has read/write access to the picked file(s)
          foreach (Windows.Storage.StorageFile file in files)
          {
              output.Append(file.Name + "\n");
          }
          this.textBlock.Text = output.ToString();
      }
      else
      {
          this.textBlock.Text = "Operation cancelled.";
      }
      

フォルダーを選ぶ: 完全なコード

var folderPicker = new Windows.Storage.Pickers.FolderPicker();
folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add("*");

Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if (folder != null)
{
    // Application now has read/write access to all contents in the picked folder
    // (including other sub-folder contents)
    Windows.Storage.AccessCache.StorageApplicationPermissions.
    FutureAccessList.AddOrReplace("PickedFolderToken", folder);
    this.textBlock.Text = "Picked folder: " + folder.Name;
}
else
{
    this.textBlock.Text = "Operation cancelled.";
}

ヒント

アプリがピッカーでファイルまたはフォルダーにアクセスするたびに、ファイルやフォルダーをアプリの FutureAccessList または MostRecentlyUsedList に追加して、ファイルやフォルダーを追跡します。 これらのリストの使用の詳細については、「最近使ったファイルやフォルダーを追跡する方法」をご覧ください。

関連項目

Windows.Storage.Pickers

ファイル、フォルダー、およびライブラリ

ファイル ピッカー コントラクトとの統合