파일 액세스 권한File access permissions

UWP(유니버설 Windows 플랫폼) 앱은 기본적으로 특정 파일 시스템 위치에 액세스할 수 있습니다.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.

다음과 같은 두 가지 기본 방법으로 앱의 설치 디렉터리에 있는 파일과 폴더에 액세스할 수 있습니다.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.

또한 다른 위치와는 달리 일부 UWP(유니버설 Windows 플랫폼) 앱용 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.

다음과 같은 두 가지 기본 방법으로 앱의 데이터 위치에 있는 파일과 폴더에 액세스할 수 있습니다.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 썸 드라이브(thumb drive)와 같은 장치를 시스템에 연결할 때 앱이 자동 실행 확장을 사용하여 자동으로 실행되는 경우 이것은 옵션입니다.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

사용자의 다운로드 폴더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는 오버로드되므로 다운로드 폴더에 동일한 이름의 기존 파일이 이미 있는 경우 시스템에서 어떻게 할지를 지정할 수 있습니다.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는 오버로드되므로 다운로드 폴더에 동일한 이름의 기존 하위 폴더가 이미 있는 경우 시스템에서 어떻게 할지를 지정할 수 있습니다.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:

위치Location 기능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 다음 접근 권한 값 중 하나 이상이 필요합니다.At least one of the following capabilities is needed.
- MusicLibrary- MusicLibrary
- PicturesLibrary- PicturesLibrary
- VideosLibrary- VideosLibrary
KnownFolders.HomeGroupKnownFolders.HomeGroup
미디어 서버 장치(DLNA)Media server devices (DLNA) 다음 접근 권한 값 중 하나 이상이 필요합니다.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

하나 이상의 인터넷 및 공용 네트워크 접근 권한 값: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.