ファイル アクセス許可File access permissions

ユニバーサル Windows プラットフォーム (UWP) アプリでは、既定で特定のファイル システムの場所にアクセスできます。Universal Windows Platform (UWP) apps can access certain file system locations by default. また、ファイル ピッカーの使用や機能の宣言によって、その他の場所にアクセスすることもできます。Apps can also access additional locations through the file picker, or by declaring capabilities.

すべてのアプリからアクセスできる場所The locations that all apps can access

新しいアプリを作成すると、既定でファイル システムの次の場所にアクセスできます。When you create a new app, you can access the following file system locations by default:

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

ユーザーのシステムでアプリがインストールされているフォルダー。The folder where your app is installed on the user's system.

アプリのインストール ディレクトリにあるファイルやフォルダーにアクセスする主な方法は 2 とおりあります。There are two primary ways to access files and folders in your app's install directory:

  1. 次のように、アプリのインストール ディレクトリを表す StorageFolder を取得できます。You can retrieve a StorageFolder that represents your app's install directory, like this:

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

    StorageFolder メソッドを使って、ディレクトリ内のファイルとフォルダーにアクセスすることができます。You can then access files and folders in the directory using StorageFolder methods. 上の例では、この StorageFolderinstallDirectory 変数に格納されています。In the example, this StorageFolder is stored in the installDirectory variable. アプリ パッケージやインストール ディレクトリの操作について詳しくは、GitHub にあるアプリ パッケージ情報のサンプルをご覧ください。You can learn more about working with your app package and install directory from the App package information sample on GitHub.

  2. 次のように、アプリの URI を使って、アプリのインストール ディレクトリからファイルを直接取得できます。You can retrieve a file directly from your app's install directory by using an app URI, like this:

    using Windows.Storage;            
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///file.txt"));
    
    Windows.Storage.StorageFile.getFileFromApplicationUriAsync("ms-appx:///file.txt").done(
        function(file) {
            // Process file
        }
    );
    
    Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
    {
        Windows::Storage::StorageFile file{
            co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{L"ms-appx:///file.txt"})
        };
        // Process file
    }
    
    auto getFileTask = create_task(StorageFile::GetFileFromApplicationUriAsync(ref new Uri("ms-appx:///file.txt")));
    getFileTask.then([](StorageFile^ file) 
    {
        // Process file
    });
    

    GetFileFromApplicationUriAsync が完了すると、アプリのインストール ディレクトリにある file.txt ファイル (この例では file) を表す StorageFile が返されます。When GetFileFromApplicationUriAsync completes, it returns a StorageFile that represents the file.txt file in the app's install directory (file in the example).

    URI の "ms-appx:///" プレフィックスは、アプリのインストール ディレクトリを参照します。The "ms-appx:///" prefix in the URI refers to the app's install directory. アプリの URI の使用について詳しくは、「URI を使ってコンテンツを参照する方法」をご覧ください。You can learn more about using app URIs in How to use URIs to reference content.

さらに、他の場所とは異なり、ユニバーサル Windows プラットフォーム (UWP) アプリの Win32 と COMMicrosoft Visual Studio の C/C++ 標準ライブラリ関数を使ってアプリのインストール ディレクトリ内のファイルにアクセスすることもできます。In addition, and unlike other locations, you can also access files in your app install directory by using some Win32 and COM for Universal Windows Platform (UWP) apps and some C/C++ Standard Library functions from Microsoft Visual Studio.

アプリのインストール ディレクトリは読み取り専用です。The app's install directory is a read-only location. インストール ディレクトリにファイル ピッカーでアクセスすることはできません。You can't gain access to the install directory through the file picker.

アプリケーション データの場所Application data locations

アプリがデータを保存できるフォルダーです。The folders where your app can store data. これらのフォルダー (ローカル、移動、一時) は、アプリのインストール時に作成されます。These folders (local, roaming and temporary) are created when your app is installed.

アプリのデータの場所にあるファイルやフォルダーにアクセスする主な方法は 2 とおりあります。There are two primary ways to access files and folders from your app's data locations:

  1. ApplicationData プロパティを使ってアプリ データ フォルダーを取得します。Use ApplicationData properties to retrieve an app data folder.

    たとえば、次のように、ApplicationData.LocalFolder を使って、アプリのローカル フォルダーを表す StorageFolder を取得できます。For example, you can use ApplicationData.LocalFolder to retrieve a StorageFolder that represents your app's local folder like this:

    using Windows.Storage;
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;
    
    var localFolder = Windows.Storage.ApplicationData.current.localFolder;
    
    Windows::Storage::StorageFolder storageFolder{
        Windows::Storage::ApplicationData::Current().LocalFolder()
    };
    
    using namespace Windows::Storage;
    StorageFolder^ storageFolder = ApplicationData::Current->LocalFolder;
    

    アプリの移動フォルダーまたは一時フォルダーにアクセスする場合は、RoamingFolder プロパティまたは TemporaryFolder プロパティを使います。If you want to access your app's roaming or temporary folder, use the RoamingFolder or TemporaryFolder property instead.

    アプリ データの場所を表す StorageFolder を取得したら、StorageFolder メソッドを使って、その場所にあるファイルやフォルダーにアクセスできます。After you retrieve a StorageFolder that represents an app data location, you can access files and folders in that location by using StorageFolder methods. 上の例では、これらの StorageFolder オブジェクトが localFolder 変数に格納されています。In the example, these StorageFolder objects are stored in the localFolder variable. アプリ データの場所の使用について詳しくは、ApplicationData クラスのページのガイダンスをご覧ください。また、GitHub からアプリケーション データ サンプルをダウンロードしてご覧ください。You can learn more about using app data locations from the guidance on the ApplicationData class page, and by downloading the Application data sample from GitHub.

  2. このように、アプリの URI を使って、アプリのローカル フォルダーからファイルを直接取得できます。You can retrieve a file directly from your app's local folder by using an app URI, like this:

    using Windows.Storage;
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/file.txt"));
    
    Windows.Storage.StorageFile.getFileFromApplicationUriAsync("ms-appdata:///local/file.txt").done(
        function(file) {
            // Process file
        }
    );
    
    Windows::Storage::StorageFile file{
        co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{ L"ms-appdata:///local/file.txt" })
    };
    // Process file
    
    using Windows::Storage;
    auto getFileTask = create_task(StorageFile::GetFileFromApplicationUriAsync(ref new Uri("ms-appdata:///local/file.txt")));
    getFileTask.then([](StorageFile^ file) 
    {
        // Process file
    });
    

    GetFileFromApplicationUriAsync が完了すると、アプリのローカル フォルダーにある file.txt ファイル (この例では file) を表す StorageFile が返されます。When GetFileFromApplicationUriAsync completes, it returns a StorageFile that represents the file.txt file in the app's local folder (file in the example).

    URI の "ms-appdata:///local/" プレフィックスは、アプリのローカル フォルダーを参照します。The "ms-appdata:///local/" prefix in the URI refers to the app's local folder. アプリの移動フォルダーまたは一時フォルダーにあるファイルにアクセスするには、"ms-appdata:///roaming/" または "ms-appdata:///temporary/" を使います。To access files in the app's roaming or temporary folders use "ms-appdata:///roaming/" or "ms-appdata:///temporary/" instead. アプリの URI の使用について詳しくは、「ファイル リソースを読み込む方法」をご覧ください。You can learn more about using app URIs in How to load file resources.

さらに、他の場所とは異なり、UWP アプリの Win32 と COM や Visual Studio の C/C++ 標準ライブラリ関数を使ってアプリ データの場所にあるファイルにアクセスすることもできます。In addition, and unlike other locations, you can also access files in your app data locations by using some Win32 and COM for UWP apps and some C/C++ Standard Library functions from Visual Studio.

ローカル フォルダー、移動フォルダー、一時フォルダーにファイル ピッカーでアクセスすることはできません。You can't access the local, roaming, or temporary folders through the file picker.

リムーバブル デバイスRemovable devices

さらに、接続されているデバイス上の一部のファイルに既定でアクセスできます。Additionally, your app can access some of the files on connected devices by default. これは、自動再生拡張機能を使って、ユーザーがデバイス (カメラや USB サム ドライブなど) をシステムに接続したときに自動的に起動されるようにする場合に使うことができます。This is an option if your app uses the AutoPlay extension to launch automatically when users connect a device, like a camera or USB thumb drive, to their system. アプリでアクセスできるファイルの種類は、アプリ マニフェストのファイルの種類の関連付けの宣言で指定されたものだけに制限されます。The files your app can access are limited to specific file types that are specified via File Type Association declarations in your app manifest.

もちろん、ファイル ピッカー (FileOpenPickerFolderPicker) を呼び出して、アプリでアクセスするファイルやフォルダーをユーザーが選べるようにすると、リムーバブル デバイス上のファイルやフォルダーにもアクセスできます。Of course, you can also gain access to files and folders on a removable device by calling the file picker (using FileOpenPicker and FolderPicker) and letting the user pick files and folders for your app to access. ファイル ピッカーの使い方については、「ピッカーでファイルやフォルダーを開く」をご覧ください。Learn how to use the file picker in Open files and folders with a picker.

注意

SD カードやその他のリムーバブル デバイスにアクセスする方法について詳しくは、「SD カードへのアクセス」をご覧ください。For more info about accessing an SD card or other removable devices, see Access the SD card.

UWP アプリからアクセスできる場所Locations that UWP apps can access

ユーザーの Downloads フォルダーUser's Downloads folder

ダウンロードされたファイルが保存される既定のフォルダーです。The folder where downloaded files are saved by default.

既定では、ユーザーの "ダウンロード" フォルダーにあるファイルやフォルダーについては、そのアプリで作成したものにしかアクセスできません。By default, your app can only access files and folders in the user's Downloads folder that your app created. ただし、ファイル ピッカー (FileOpenPicker または FolderPicker) を呼び出して、アプリでアクセスするファイルやフォルダーをユーザーが参照して選べるようにすると、ユーザーの "ダウンロード" フォルダーにあるファイルやフォルダーにアクセスできるようになります。However, you can gain access to files and folders in the user's Downloads folder by calling a file picker (FileOpenPicker or FolderPicker) so that users can navigate and pick files or folders for your app to access.

  • 次のように、ユーザーの "ダウンロード" フォルダーにファイルを作成できます。You can create a file in the user's Downloads folder like this:

    using Windows.Storage;
    StorageFile newFile = await DownloadsFolder.CreateFileAsync("file.txt");
    
    Windows.Storage.DownloadsFolder.createFileAsync("file.txt").done(
        function(newFile) {
            // Process file
        }
    );
    
    Windows::Storage::StorageFile newFile{
        co_await Windows::Storage::DownloadsFolder::CreateFileAsync(L"file.txt")
    };
    // Process file
    
    using Windows::Storage;
    auto createFileTask = create_task(DownloadsFolder::CreateFileAsync(L"file.txt"));
    createFileTask.then([](StorageFile^ newFile)
    {
        // Process file
    });
    

    DownloadsFolder.CreateFileAsync は、同じ名前のファイルが既に Downloads フォルダーにある場合に、システムで行う必要がある内容を指定できるようにオーバーロードされます。DownloadsFolder.CreateFileAsync is overloaded so that you can specify what the system should do if there is already an existing file in the Downloads folder that has the same name. これらのメソッドが完了すると、作成されたファイルを表す StorageFile が返されます。When these methods complete, they return a StorageFile that represents the file that was created. 上の例では、このファイルの名前は newFile です。This file is called newFile in the example.

  • 次のように、ユーザーの "ダウンロード" フォルダーにサブフォルダーを作成できます。You can create a subfolder in the user's Downloads folder like this:

    using Windows.Storage;
    StorageFolder newFolder = await DownloadsFolder.CreateFolderAsync("New Folder");
    
    Windows.Storage.DownloadsFolder.createFolderAsync("New Folder").done(
        function(newFolder) {
            // Process folder
        }
    );
    
    Windows::Storage::StorageFolder newFolder{
        co_await Windows::Storage::DownloadsFolder::CreateFolderAsync(L"New Folder")
    };
    // Process folder
    
    using Windows::Storage;
    auto createFolderTask = create_task(DownloadsFolder::CreateFolderAsync(L"New Folder"));
    createFolderTask.then([](StorageFolder^ newFolder)
    {
        // Process folder
    });
    

    DownloadsFolder.CreateFolderAsync は、同じ名前のサブフォルダーが既に Downloads フォルダーにある場合に、システムで行う必要がある内容を指定できるようにオーバーロードされます。DownloadsFolder.CreateFolderAsync is overloaded so that you can specify what the system should do if there is already an existing subfolder in the Downloads folder that has the same name. これらのメソッドが完了すると、作成されたサブフォルダーを表す StorageFolder が返されます。When these methods complete, they return a StorageFolder that represents the subfolder that was created. 上の例では、このファイルの名前は newFolder です。This file is called newFolder in the example.

"ダウンロード" フォルダーにファイルやフォルダーを作成する場合は、以降に簡単にアクセスできるように、その項目をアプリの FutureAccessList に追加することをお勧めします。If you create a file or folder in the Downloads folder, we recommend that you add that item to your app's FutureAccessList so that your app can readily access that item in the future.

その他の場所へのアクセスAccessing additional locations

アプリで、既定の場所以外にあるファイルやフォルダーにアクセスするには、アプリ マニフェストで機能を宣言するか、ファイル ピッカーを呼び出してアプリでアクセスするファイルやフォルダーをユーザーが選べるようにします。詳しくは、「アプリ機能の宣言」または「ピッカーでファイルやフォルダーを開く」をご覧ください。In addition to the default locations, an app can access additional files and folders by declaring capabilities in the app manifest (see App capability declarations), or by calling a file picker to let the user pick files and folders for the app to access (see Open files and folders with a picker).

AppExecutionAlias 拡張機能を宣言したアプリには、コンソール ウィンドウでアプリが起動されたディレクトリおよびその下位レベルのディレクトリに対する、ファイル システムのアクセス許可が与えられます。App's that that declare the AppExecutionAlias extension, have file-system permissions from the directory that they are launched from in the console window, and downwards.

次の表に、機能の宣言や関連付けられた Windows.Storage API の使用によってアクセスできるその他の場所を示します。The following table lists additional locations that you can access by declaring a capability (or capabilities) and using the associated Windows.Storage API:

LocationLocation 機能Capability Windows.Storage APIWindows.Storage API
ユーザーがアクセス権を持つすべてのファイル。All files that the user has access to. 例: ドキュメント、画像、写真、ダウンロード、デスクトップ、OneDrive などです。For example: documents, pictures, photos, downloads, desktop, OneDrive, etc. broadFileSystemAccessbroadFileSystemAccess

これは、制限付き機能です。This is a restricted capability. アクセスは、 [設定] > [プライバシー] > [ファイル システム] で構成できます。Access is configurable in Settings > Privacy > File system. ユーザーは [設定] でいつでもアクセスを許可または拒否できるため、アプリがこれらの変更に対して回復力があることを確認する必要があります。Because users can grant or deny the permission any time in Settings, you should ensure that your app is resilient to those changes. アプリでアクセスできないことがわかった場合は、「Windows 10 ファイル システムへのアクセスとプライバシー」の記事へのリンクを提供し、ユーザーに設定の変更を求めるように選択できます。If you find that your app does not have access, you may choose to prompt the user to change the setting by providing a link to the Windows 10 file system access and privacy article. ユーザーはアプリを閉じ、設定を切り替え、アプリを再起動する必要があることに注意してください。Note that the user must close the app, toggle the setting, and restart the app. アプリの実行中に設定を切り替えると、状態を保存できるようにプラットフォームでアプリが中断され、その後、新しい設定を適用するためにアプリが強制的に終了されます。If they toggle the setting while the app is running, the platform will suspend your app so that you can save the state, then forcibly terminate the app in order to apply the new setting. 2018 年 4 月の更新プログラムでは、アクセス許可の既定値はオンです。In the April 2018 update, the default for the permission is On. 2018 の年 10 月の更新プログラムでは、既定値はオフです。In the October 2018 update, the default is Off.

この機能を宣言するアプリを Microsoft Store に提出する場合、アプリでこの機能が必要となる理由およびこの機能の使用目的に関する追加の説明を提供する必要があります。If you submit an app to the Store that declares this capability, you will need to supply additional descriptions of why your app needs this capability, and how it intends to use it.
この機能は、Windows.Storage 名前空間の API で動作します。This capability works for APIs in the Windows.Storage namespace. アプリでこの機能を有効にする方法の例については、この記事の最後の「」セクションを参照してください。See the Example section at the end of this article for an example of how to enable this capability in your app.
なしn/a
ドキュメントDocuments DocumentsLibraryDocumentsLibrary

注:アプリ マニフェストにファイルの種類の関連付けを追加し、この場所でアプリからアクセスできるファイルの種類を具体的に宣言する必要があります。Note: You must add File Type Associations to your app manifest that declare specific file types that your app can access in this location.

この機能は、アプリが次の条件を満たす場合に使います。Use this capability if your app:
- 有効な OneDrive URL またはリソース ID を使った、特定の OneDrive コンテンツへのクロスプラットフォーム オフライン アクセスを容易にする- Facilitates cross-platform offline access to specific OneDrive content using valid OneDrive URLs or Resource IDs
- オフライン時に、開いているファイルをユーザーの OneDrive に自動的に保存する- Saves open files to the user's OneDrive automatically while offline
KnownFolders.DocumentsLibraryKnownFolders.DocumentsLibrary
音楽Music MusicLibraryMusicLibrary
ミュージック、画像、およびビデオ ライブラリのファイルとフォルダー」もご覧ください。Also see Files and folders in the Music, Pictures, and Videos libraries.
KnownFolders.MusicLibraryKnownFolders.MusicLibrary
画像Pictures PicturesLibraryPicturesLibrary
ミュージック、画像、およびビデオ ライブラリのファイルとフォルダー」もご覧ください。Also see Files and folders in the Music, Pictures, and Videos libraries.
KnownFolders.PicturesLibraryKnownFolders.PicturesLibrary
ビデオVideos VideosLibraryVideosLibrary
ミュージック、画像、およびビデオ ライブラリのファイルとフォルダー」もご覧ください。Also see Files and folders in the Music, Pictures, and Videos libraries.
KnownFolders.VideosLibraryKnownFolders.VideosLibrary
リムーバブル デバイスRemovable devices RemovableDevicesRemovableDevices

注 アプリ マニフェストにファイルの種類の関連付けを追加し、この場所でアプリがアクセスできるファイルの種類を具体的に宣言する必要があります。Note You must add File Type Associations to your app manifest that declare specific file types that your app can access in this location.

SD カードへのアクセス」もご覧ください。Also see Access the SD card.
KnownFolders.RemovableDevicesKnownFolders.RemovableDevices
ホームグループ ライブラリHomegroup libraries 次の機能が 1 つ以上必要です。At least one of the following capabilities is needed.
- MusicLibrary- MusicLibrary
- PicturesLibrary- PicturesLibrary
- VideosLibrary- VideosLibrary
KnownFolders.HomeGroupKnownFolders.HomeGroup
メディア サーバー デバイス (DLNA)Media server devices (DLNA) 次の機能が 1 つ以上必要です。At least one of the following capabilities is needed.
- MusicLibrary- MusicLibrary
- PicturesLibrary- PicturesLibrary
- VideosLibrary- VideosLibrary
KnownFolders.MediaServerDevicesKnownFolders.MediaServerDevices
汎用名前付け規則 (UNC) フォルダーUniversal Naming Convention (UNC) folders 次の機能の組み合わせが必要です。A combination of the following capabilities is needed.

ホーム ネットワークと社内ネットワークの機能:The home and work networks capability:
- PrivateNetworkClientServer- PrivateNetworkClientServer

インターネットとパブリック ネットワークの 1 つ以上の機能:And at least one internet and public networks capability:
- InternetClient- InternetClient
- InternetClientServer- InternetClientServer

ドメイン資格情報の機能 (該当する場合):And, if applicable, the domain credentials capability:
- EnterpriseAuthentication- EnterpriseAuthentication

注:アプリ マニフェストにファイルの種類の関連付けを追加し、この場所でアプリからアクセスできるファイルの種類を具体的に宣言する必要があります。Note: You must add File Type Associations to your app manifest that declare specific file types that your app can access in this location.
フォルダーを取得する場合:Retrieve a folder using:
StorageFolder.GetFolderFromPathAsyncStorageFolder.GetFolderFromPathAsync

ファイルを取得する場合:Retrieve a file using:
StorageFile.GetFileFromPathAsyncStorageFile.GetFileFromPathAsync

Example

この例では、制限付きの broadFileSystemAccess 機能を追加します。This example adds the restricted broadFileSystemAccess capability. 機能を指定するだけでなく、rescap 名前空間を追加し、IgnorableNamespaces に追加する必要もあります。In addition to specifying the capability, the rescap namespace must be added, and is also added to IgnorableNamespaces:

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

注意

すべてのアプリ機能の一覧については、「アプリ機能の宣言」をご覧ください。For a complete list of app capabilities, see App capability declarations.