다음을 통해 공유


파일 액세스 권한

UWP(유니버설 Windows 플랫폼) 앱은 기본적으로 특정 파일 시스템 위치에 액세스할 수 있습니다. 앱은 파일 선택기를 통하거나 기능을 선언하여 추가 위치에 액세스할 수도 있습니다.

UWP 앱이 액세스할 수 있는 위치

새 앱을 만들 때 기본적으로 다음 파일 시스템 위치에 액세스할 수 있습니다.

애플리케이션 설치 디렉터리

사용자 시스템에서 앱이 설치된 폴더입니다.

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

  1. 다음과 같이 앱의 설치 디렉터리를 나타내는 StorageFolder를 검색할 수 있습니다.

    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 메서드를 사용하여 디렉터리의 파일 및 폴더에 액세스할 수 있습니다. 예제에서 이 StorageFolderinstallDirectory 변수에 저장됩니다. 앱 패키지로 작업하고 GitHub에 있는 앱 패키지 정보 샘플에서 디렉토리를 설치하는 방법에 대해 자세히 학습할 수 있습니다.

  2. 아래와 같이 앱 URI를 사용하여 앱의 설치 디렉터리에서 직접 파일을 검색할 수 있습니다.

    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 파일을 나타내는 StorageFile을 반환합니다(예제에서는 file).

    URI의 "ms-appx:///" 접두사는 앱의 설치 디렉터리를 참조합니다. URI를 사용하여 콘텐츠를 참조하는 방법에서 앱 URI를 사용하는 방법에 대해 자세히 알아볼 수 있습니다.

또한 다른 위치와 달리 일부 Win32 및 UWP(유니버설 Windows 플랫폼용 COM) 앱과 일부 Microsoft Visual Studio의 C/C++ 표준 라이브러리 함수를 사용하여 앱 설치 디렉터리의 파일에 액세스할 수도 있습니다.

앱의 설치 디렉터리가 읽기 전용 위치입니다. 파일 선택기를 통해서는 설치 디렉터리에 액세스할 수 없습니다.

애플리케이션 데이터 위치 액세스

앱에서 데이터를 저장할 수 있는 폴더입니다. 이러한 폴더(로컬, 로밍 및 임시)는 앱이 설치될 때 만들어집니다.

다음과 같은 두 가지 기본 방법으로 앱의 데이터 위치에 있는 파일과 폴더에 액세스할 수 있습니다.

  1. ApplicationData 속성을 사용하여 앱 데이터 폴더를 검색합니다.

    예를 들어 ApplicationData를 사용할 수 있습니다. LocalFolder는 다음과 같이 앱의 로컬 폴더를 나타내는 StorageFolder를 검색합니다.

    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 속성을 사용합니다.

    앱 데이터 위치를 나타내는 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.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 파일을 나타내는 StorageFile을 반환합니다(예제에서는 file).

    URI의 "ms-appdata:///local/" 접두사는 앱의 로컬 폴더를 참조합니다. 앱의 로밍 또는 임시 폴더의 파일에 액세스하려면 대신 "ms-appdata:///roaming/" 또는 "ms-appdata:///temporary/"를 사용합니다. 파일 리소스를 로드하는 방법에서 앱 URI를 사용하는 방법에 대해 자세히 알아볼 수 있습니다.

또한 다른 위치와 달리 UWP 앱용 Win32 및 COM과 Visual Studio의 일부 C/C++ 표준 라이브러리 함수를 사용하여 앱 데이터 위치의 파일에 액세스할 수도 있습니다.

파일 선택기를 통해서는 로컬, 로밍 또는 임시 폴더에 액세스할 수 없습니다.

이동식 디바이스 액세스

또한 앱은 기본적으로 연결된 디바이스의 일부 파일에 액세스할 수 있습니다. 사용자가 카메라 또는 USB 썸 드라이브와 같은 디바이스를 시스템에 연결할 때 앱에서 AutoPlay 확장을 사용하여 자동으로 시작하는 경우 옵션입니다. 앱에서 액세스할 수 있는 파일은 앱 매니페스트의 파일 형식 연결 선언을 통해 지정된 특정 파일 형식으로 제한됩니다.

물론 파일 선택기(FileOpenPickerFolderPicker 사용)를 호출하고 사용자가 앱에 액세스할 파일 및폴더를 선택하도록 하여 이동식 디바이스의 파일 및 폴더에 액세스할 수도 있습니다. 파일 선택기 사용 방법에 대한 자세한 내용은 선택기를 사용하여 파일 및 폴더 열기를 참조하세요.

참고 항목

다른 이동식 디바이스에서 SD 카드에 액세스하는 방법에 대한 자세한 내용은 SD 카드 액세스를 참조하세요.

사용자의 다운로드 폴더

다운로드한 파일이 기본적으로 저장되는 폴더입니다.

기본적으로 앱은 앱이 만든 사용자의 다운로드 폴더에 있는 파일 및 폴더에만 액세스할 수 있습니다. 그러나 사용자가 앱에서 액세스할 파일 또는 폴더를 탐색하고 선택할 수 있도록 파일 선택기(FileOpenPicker 또는 FolderPicker)를 호출하여 사용자 다운로드 폴더의 파일 및 폴더에 액세스할 수 있습니다.

  • 다음과 같이 사용자의 다운로드 폴더에 파일을 만들 수 있습니다.

    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는 오버로드되므로 다운로드 폴더에 동일한 이름의 기존 파일이 이미 있는 경우 시스템에서 어떻게 할지를 지정할 수 있습니다. 이러한 메서드가 완료되면 생성된 파일을 나타내는 StorageFile을 반환합니다. 이 파일은 예제에서 newFile(이)라고 합니다.

  • 다음과 같이 사용자의 다운로드 폴더에 하위 폴더를 만들 수 있습니다.

    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는 오버로드되므로 다운로드 폴더에 동일한 이름의 기존 하위 폴더가 이미 있는 경우 시스템에서 어떻게 할지를 지정할 수 있습니다. 이러한 메서드가 완료되면 생성된 하위 폴더를 나타내는 StorageFolder를 반환합니다. 이 파일은 예제에서 newFolder(이)라고 합니다.

추가 위치 액세스

기본 위치 외에 앱은 앱 매니페스트의 기능을 선언하거나 파일 선택기를 호출하여 사용자가 앱에 액세스할 파일과 폴더를 선택할 수 있도록 하여 추가 파일 및 폴더에 액세스할 수 있습니다.

AppExecutionAlias 확장을 선언하는 앱은 콘솔 창에서 앱이 실행되는 디렉토리(및 하위 디렉토리)에 대해 파일 시스템 권한이 있습니다.

파일 및 폴더에 대한 액세스 권한 유지

앱이 선택기, 파일 활성화, 끌어서 놓기 작업 등을 통해 파일 또는 폴더를 검색하는 경우 앱이 종료되기 전까지만 해당 파일이나 폴더에 액세스할 수 있습니다. 나중에 파일 또는 폴더에 자동으로 액세스하려면 FutureAccessList에 추가하여 앱이 나중에 해당 항목에 쉽게 액세스하도록 할 수 있습니다. 또한 MostRecentlyUsedList를 사용하여 최근에 사용한 파일 목록을 손쉽게 관리할 수 있습니다.

다른 위치에 액세스하기 위한 기능

다음 표에는 하나 이상의 기능을 선언하고 관련 Windows.Storage API를 사용하여 액세스할 수 있는 추가 위치가 나와 있습니다.

위치 기능 Windows.Storage API
사용자에게 액세스 권한이 있는 모든 파일입니다. 예: 문서, 그림, 사진, 다운로드, 데스크톱, OneDrive 등. broadFileSystemAccess

이는 제한된 접근 권한 값입니다. 액세스는 설정>개인 정보>파일 시스템에서 구성할 수 있습니다. 사용자가 언제든지 설정에서 권한을 부여 또는 거부할 수 있으므로 앱은 이러한 변경에 탄력적으로 반응할 수 있어야 합니다. 앱에 액세스 권한이 없는 경우 Windows 파일 시스템 액세스 및 개인정보 보호 문서에 대한 링크를 제공하여 사용자에게 설정을 변경하라는 메시지를 표시할 수 있습니다. 사용자는 앱을 닫고, 설정을 전환하고, 앱을 다시 시작해야 합니다. 이러한 앱이 실행되는 동안 사용자가 설정을 전환하면 플랫폼은 사용자가 상태를 저장한 후 새 설정 저장을 위해 앱을 강제로 종료할 수 있도록 앱을 일시 중단합니다. 2018년 4월 업데이트에서 사용 권한의 기본값은 켜짐입니다. 2018년 10월 업데이트에서 기본값은 꺼짐입니다.

이 접근 권한 값을 선언하는 Microsoft Store에 앱을 제출하는 경우 앱에 이 접근 권한 값이 필요한 이유와 이를 사용할 방법에 대한 추가 설명을 제공해야 합니다.

이 접근 권한 값은 Windows.Storage 네임스페이스의 API에 대해 작동합니다. 앱에서 이 접근 권한 값을 사용하도록 설정하는 방법의 예를 보려면 이 문서 끝에 나오는 예제 섹션을 참조하세요.

참고: 이 기능은 Xbox에서 지원되지 않습니다.
해당 없음
문서 documentsLibrary

참고: 앱이 이 위치에서 액세스할 수 있는 특정 파일 형식을 선언하는 파일 형식 연결을 앱 매니페스트에 추가해야 합니다.

앱의 경우 다음 기능을 사용합니다.
- 유효한 OneDrive URL 또는 리소스 ID를 사용하여 특정 OneDrive 콘텐츠에 대한 플랫폼 간 오프라인 액세스를 용이하게 합니다.
- 오프라인에 있는 동안 열려 있는 파일을 사용자의 OneDrive에 자동으로 저장합니다.
KnownFolders.DocumentsLibrary
음악 musicLibrary
음악, 사진 및 비디오 라이브러리의 파일 및 폴더도 참조하세요.
KnownFolders.MusicLibrary
사진 picturesLibrary
음악, 사진 및 비디오 라이브러리의 파일 및 폴더도 참조하세요.
KnownFolders.PicturesLibrary
동영상 videosLibrary
음악, 사진 및 비디오 라이브러리의 파일 및 폴더도 참조하세요.
KnownFolders.VideosLibrary
이동식 디바이스 removableStorage

참고: 앱이 이 위치에서 액세스할 수 있는 특정 파일 형식을 선언하는 파일 형식 연결을 앱 매니페스트에 추가해야 합니다.

SD 카드 액세스도 참조하세요.
KnownFolders.RemovableDevices
홈 그룹 라이브러리 다음 기능 중 하나 이상이 필요합니다.
- musicLibrary
- picturesLibrary
- videosLibrary
KnownFolders.HomeGroup
미디어 서버 디바이스(DLNA) 다음 기능 중 하나 이상이 필요합니다.
- musicLibrary
- picturesLibrary
- videosLibrary
KnownFolders.MediaServerDevices
UNC(범용 명명 규칙) 폴더 다음 기능의 조합이 필요합니다.

홈 및 회사 네트워크 기능:
- privateNetworkClientServer

그리고 하나 이상의 인터넷 및 공용 네트워크 기능:
- internetClient
- internetClientServer

그리고 해당하는 경우 도메인 자격 증명 기능은 다음과 같습니다.
- enterpriseAuthentication

참고: 앱이 이 위치에서 액세스할 수 있는 특정 파일 형식을 선언하는 파일 형식 연결을 앱 매니페스트에 추가해야 합니다.
다음을 사용하여 폴더를 검색합니다.
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>

참고 항목

앱 접근 권한 값의 전체 목록을 보려면 앱 접근 권한 값 선언을 참조하세요.