次の方法で共有


ファイル アクセス許可

WinUI アプリは、既定で特定のファイル システムの場所にアクセスできます。 アプリは、ファイル ピッカーを使用して、または機能を宣言することによって、追加の場所にアクセスすることもできます。

WinUI アプリがアクセスできる場所

新しいアプリを作成すると、既定で次のファイル システムの場所にアクセスできます。

アプリケーションのインストール ディレクトリ

ユーザーのシステムにアプリがインストールされているフォルダー。

アプリのインストール ディレクトリ内のファイルとフォルダーにアクセスするには、主に次の 2 つの方法があります。

  1. 次のように、アプリのインストール ディレクトリを表す StorageFolder を取得できます。

    Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
    
    #include <winrt/Windows.Storage.h>
    ...
    Windows::Storage::StorageFolder installedLocation{ Windows::ApplicationModel::Package::Current().InstalledLocation() };
    

    その後、 StorageFolder メソッドを使用して、ディレクトリ内のファイルとフォルダーにアクセスできます。 この例では、この StorageFolder は installDirectory 変数に格納されています。 アプリ パッケージの操作とディレクトリのインストールの詳細については、GitHub の アプリ パッケージ情報サンプル を参照してください。

  2. 次のように、アプリの URI を使用して、アプリのインストール ディレクトリから直接ファイルを取得できます。

    using Windows.Storage;            
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///file.txt"));
    
    Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
    {
        Windows::Storage::StorageFile file{
            co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{L"ms-appx:///file.txt"})
        };
        // Process file
    }
    

    GetFileFromApplicationUriAsync が完了すると、アプリのインストール ディレクトリ (例では) のfile.txt ファイルを表す file が返されます。

    URI の "ms-appx:///" プレフィックスは、アプリのインストール ディレクトリを参照します。 アプリ URI の使用方法の詳細については、「URI を 使用してコンテンツを参照する方法」を参照してください。

さらに、他の場所とは異なり、 WinUI アプリ用の Win32 と COMおよび Microsoft Visual Studio の C/C++ 標準ライブラリ関数を使用して、アプリのインストール ディレクトリ内のファイルにアクセスすることもできます。

アプリのインストール ディレクトリは読み取り専用の場所です。 ファイル ピッカーを使用してインストール ディレクトリにアクセスすることはできません。

アプリケーション データの場所にアクセスする

アプリがデータを格納できるフォルダー。 これらのフォルダー (ローカル、ローミング、一時) は、アプリのインストール時に作成されます。

アプリのデータの場所からファイルとフォルダーにアクセスするには、主に次の 2 つの方法があります。

  1. ApplicationData プロパティを使用して、アプリ データ フォルダーを取得します。

    たとえば、ApplicationData を使用できます。次のように、アプリのローカル フォルダーを表す StorageFolder を取得する LocalFolder:

    using Windows.Storage;
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;
    
    Windows::Storage::StorageFolder storageFolder{
        Windows::Storage::ApplicationData::Current().LocalFolder()
    };
    

    アプリのローミング フォルダーまたは一時フォルダーにアクセスする場合は、代わりに RoamingFolder または TemporaryFolder プロパティを使用します。

    アプリのデータの場所を表す StorageFolder を取得した後は、StorageFolder メソッドを使用してその場所のファイルとフォルダーにアクセスできます。 この例では、これらの StorageFolder オブジェクトは localFolder 変数に格納されています。 アプリ データの場所の使用の詳細については、 ApplicationData クラス ページのガイダンスと、GitHub から アプリケーション データ サンプル をダウンロードします。

  2. 次のようなアプリ URI を使用して、アプリのローカル フォルダーから直接ファイルを取得できます。

    using Windows.Storage;
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/file.txt"));
    
    Windows::Storage::StorageFile file{
        co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{ L"ms-appdata:///local/file.txt" })
    };
    // Process file
    

    GetFileFromApplicationUriAsync が完了すると、アプリのローカル フォルダー (例では) のfile.txt ファイルを表す file が返されます。

    URI の "ms-appdata:///local/" プレフィックスは、アプリのローカル フォルダーを参照します。 アプリのローミング フォルダーまたは一時フォルダー内のファイルにアクセスするには、代わりに "ms-appdata:///roaming/" または "ms-appdata:///temporary/" を使用します。 アプリ URI の使用の詳細については、「 ファイル リソースを読み込む方法」を参照してください。

さらに、他の場所とは異なり、 WinUI アプリ用の Win32 と COM 、および Visual Studio の一部の C/C++ 標準ライブラリ関数を使用して、アプリのデータの場所にあるファイルにアクセスすることもできます。

ファイル ピッカーを使用してローカル フォルダー、ローミング フォルダー、または一時フォルダーにアクセスすることはできません。

リムーバブル デバイスへのアクセス

さらに、アプリは、接続されているデバイス上の一部のファイルに既定でアクセスできます。 これは、ユーザーがカメラや USB サム ドライブなどのデバイスをシステムに接続するときに、アプリで 自動再生拡張機能 を使用して自動的に起動する場合のオプションです。 アプリがアクセスできるファイルは、アプリ マニフェストでファイルの種類の関連付け宣言を使用して指定された特定のファイルの種類に制限されます。

もちろん、( FileOpenPickerFolderPicker を使用して) ファイル ピッカーを呼び出し、ユーザーがアクセスするアプリのファイルとフォルダーを選択できるようにすることで、リムーバブル デバイス上のファイルとフォルダーにアクセスすることもできます。 ファイル ピッカーを使用してファイルやフォルダーを開く方法については、ピッカーを使用してファイルとフォルダーを開くをご覧ください。

SD カードまたはその他のリムーバブル デバイスへのアクセスの詳細については、「 SD カードにアクセスする」を参照してください。

ユーザーのダウンロード フォルダー

ダウンロードしたファイルが既定で保存されるフォルダー。

既定では、アプリは、アプリが作成したユーザーのダウンロード フォルダー内のファイルとフォルダーにのみアクセスできます。 ただし、ファイル ピッカー (FileOpenPicker または FolderPicker) を呼び出すことによって、ユーザーのダウンロード フォルダー内のファイルとフォルダーにアクセスして、ユーザーがアクセスするファイルまたはフォルダーをユーザーが移動して選択できるようにすることができます。

  • 次のように、ユーザーのダウンロード フォルダーにファイルを作成できます。

    using Windows.Storage;
    StorageFile newFile = await DownloadsFolder.CreateFileAsync("file.txt");
    
    Windows::Storage::StorageFile newFile{
        co_await Windows::Storage::DownloadsFolder::CreateFileAsync(L"file.txt")
    };
    // Process file
    

    DownloadsFolderCreateFileAsync はオーバーロードされるため、ダウンロード フォルダーに同じ名前の既存のファイルが既にある場合にシステムが実行する必要がある処理を指定できます。 これらのメソッドが完了すると、作成されたファイルを表す StorageFile が返されます。 このファイルは、この例では newFile 呼び出されます。

  • 次のように、ユーザーのダウンロード フォルダーにサブフォルダーを作成できます。

    using Windows.Storage;
    StorageFolder newFolder = await DownloadsFolder.CreateFolderAsync("New Folder");
    
    Windows::Storage::StorageFolder newFolder{
        co_await Windows::Storage::DownloadsFolder::CreateFolderAsync(L"New Folder")
    };
    // Process folder
    

    DownloadsFolderCreateFolderAsync はオーバーロードされるため、ダウンロード フォルダーに同じ名前の既存のサブフォルダーが既にある場合にシステムが実行する必要がある処理を指定できます。 これらのメソッドが完了すると、作成されたサブフォルダーを表す StorageFolder が返されます。 このファイルは、この例では newFolder 呼び出されます。

追加の場所へのアクセス

アプリは、既定の場所に加えて、アプリ マニフェストで機能を宣言 するか、 ファイル ピッカーを呼び出 して、アクセスするアプリのファイルとフォルダーを選択できるようにすることで、追加のファイルやフォルダーにアクセスできます。

AppExecutionAlias 拡張機能を宣言するアプリには、コンソール ウィンドウで起動されるディレクトリから下方向のファイル システムアクセス許可があります。

ファイルとフォルダーへのアクセスの保持

ピッカー、ファイルのアクティブ化、ドラッグ アンド ドロップ操作などを使用してアプリがファイルまたはフォルダーを取得する場合、アプリはアプリが終了するまで、そのファイルまたはフォルダーにのみアクセスできます。 今後自動的にファイルまたはフォルダーにアクセスする場合は、 FutureAccessList に追加して、アプリが将来そのアイテムに簡単にアクセスできるようにすることができます。 MostRecentlyUsedList を使用して、最近使用したファイルの一覧を簡単に管理することもできます。

他の場所にアクセスするための機能

次の表に、1 つ以上の機能を宣言し、関連付けられている Windows.Storage API を使用してアクセスできるその他の場所を示します。

場所 能力 Windows.Storage API
ユーザーがアクセスできるすべてのファイル。 たとえば、ドキュメント、画像、写真、ダウンロード、デスクトップ、OneDrive などです。 ファイルシステムへ広範なアクセス

これは制限付き機能です。 アクセスは、設定 > プライバシー >Fileシステムで構成できます。 ユーザーは [設定] でアクセス許可をいつでも付与または拒否できるため、アプリがこれらの変更に対する回復性を備えていることを確認する必要があります。 アプリにアクセス権がない場合は、 Windows ファイル システムのアクセスとプライバシー に関する記事へのリンクを指定して、設定の変更をユーザーに求めることもできます。 ユーザーはアプリを閉じ、設定を切り替えて、アプリを再起動する必要があることに注意してください。 アプリの実行中に設定を切り替える場合、プラットフォームは状態を保存できるようにアプリを中断し、新しい設定を適用するためにアプリを強制的に終了します。 2018 年 4 月の更新プログラムでは、アクセス許可の既定値はオンです。 2018 の年 10 月の更新プログラムでは、既定値はオフです。

この機能を宣言するアプリをストアに提出する場合は、アプリでこの機能が必要な理由と、その機能を使用する方法について追加の説明を提供する必要があります。

この機能は、 Windows.Storage 名前空間の API に対して機能します。 アプリでこの機能を有効にする方法の例については、この記事の最後にある「例」セクションを参照してください。

注: この機能は、Xbox ではサポートされていません。
なし
ドキュメント​ ドキュメントライブラリ

注: この場所でアプリがアクセスできる特定のファイルの種類を宣言するファイルの種類の関連付けをアプリ マニフェストに追加する必要があります。

アプリで次の場合は、この機能を使用します。
- 有効な OneDrive URL またはリソース ID を使用して、特定の OneDrive コンテンツへのクロスプラットフォーム オフライン アクセスを容易にします
- オフライン時に開いているファイルをユーザーの OneDrive に自動的に保存する
KnownFolders.DocumentsLibrary
音楽 ミュージックライブラリ
音楽 、画像、ビデオライブラリのファイルとフォルダーも参照してください。
KnownFolders.MusicLibrary
写真 ピクチャ・ライブラリ
音楽 、画像、ビデオライブラリのファイルとフォルダーも参照してください。
既知のフォルダ.PicturesLibrary
動画 動画ライブラリ
音楽 、画像、ビデオライブラリのファイルとフォルダーも参照してください。
KnownFolders.VideosLibrary
リムーバブル デバイス リムーバブルストレージ

注: この場所でアプリがアクセスできる特定のファイルの種類を宣言するファイルの種類の関連付けをアプリ マニフェストに追加する必要があります。

SD カードへのアクセスも参照してください。
KnownFolders.RemovableDevices
ホームグループ ライブラリ 次の機能のうち少なくとも 1 つが必要です。
- musicLibrary
- 画像ライブラリ
- 動画ライブラリ
KnownFolders.HomeGroup
メディア サーバー デバイス (DLNA) 次の機能のうち少なくとも 1 つが必要です。
- musicLibrary
- 画像ライブラリ
- ビデオライブラリ
KnownFolders.MediaServerDevices
汎用名前付け規則 (UNC) フォルダー 次の機能の組み合わせが必要です。

家庭ネットワークと職場ネットワークの機能:
- privateNetworkClientServer(プライベートネットワーククライアントサーバー)

また、少なくとも 1 つのインターネットとパブリック ネットワークの機能:
- internetClient
- internetClientServer

また、該当する場合は、ドメイン資格情報の機能を次に示します。
- エンタープライズ認証

メモ: この場所でアプリがアクセスできる特定のファイルの種類を宣言するファイルの種類の関連付けをアプリ マニフェストに追加する必要があります。
次を使用してフォルダーを取得します。
StorageFolder.GetFolderFromPathAsync

次を使用してファイルを取得します。
StorageFile.GetFileFromPathAsync

この例では、制限付き broadFileSystemAccess 機能を追加します。 機能を指定するだけでなく、 rescap 名前空間を追加し、 IgnorableNamespacesにも追加する必要があります。

<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>

アプリの機能の完全な一覧については、「アプリ機能の 宣言」を参照してください。