SD 카드에 액세스Access the SD card

중요하지 않은 데이터는 옵션인 microSD 카드에 저장하고 액세스할 수 있습니다. 특히 내부 스토리지 용량이 제한적이고, SD 카드용 슬롯이 있는 저가대의 모바일 디바이스에 이 기능이 유용합니다.You can store and access non-essential data on an optional microSD card, especially on low-cost mobile devices that have limited internal storage and have a slot for an SD card.

앱에서 SD 카드에 파일을 저장하고 액세스하려면 먼저 앱 매니페스트 파일에서 removableStorage 접근 권한 값을 지정해야 합니다.In most cases, you have to specify the removableStorage capability in the app manifest file before your app can store and access files on the SD card. 일반적으로 앱이 저장하고 액세스하는 파일의 형식을 처리하려면 등록해야 합니다.Typically you also have to register to handle the type of files that your app stores and accesses.

다음 방법을 사용하여 선택 사항인 SD 카드에 파일을 저장하고 액세스할 수 있습니다.You can store and access files on the optional SD card by using the following methods:

SD 카드에서 액세스할 수 있는 항목 및 액세스할 수 없는 항목What you can and can't access on the SD card

액세스할 수 있는 항목What you can access

  • 앱은 앱 매니페스트 파일에서 앱이 처리하는 것으로 등록되어 있는 파일 형식의 파일만 읽고 쓸 수 있습니다.Your app can only read and write files of file types that the app has registered to handle in the app manifest file.
  • 앱은 폴더를 만들고 관리할 수도 있습니다.Your app can also create and manage folders.

액세스할 수 없는 항목What you can't access

  • 앱은 시스템 폴더 및 이 폴더에 있는 파일을 표시하거나 액세스할 수 없습니다.Your app can't see or access system folders and the files that they contain.
  • 앱은 Hidden 특성으로 표시된 파일을 볼 수 없습니다.Your app can't see files that are marked with the Hidden attribute. Hidden 특성은 일반적으로 데이터를 실수로 삭제하는 위험을 줄이는 데 사용됩니다.The Hidden attribute is typically used to reduce the risk of deleting data accidentally.
  • 앱은 KnownFolders.DocumentsLibrary를 사용하여 문서 라이브러리를 보거나 액세스할 수 없습니다.Your app can't see or access the Documents library by using KnownFolders.DocumentsLibrary. 그러나 파일 시스템을 트래버스하여 SD 카드의 문서 라이브러리에 액세스할 수 있습니다.However you can access the Documents library on the SD card by traversing the file system.

보안 및 개인 정보 설정 고려 사항Security and privacy considerations

앱이 SD 카드의 전역 위치에 파일을 저장하면 해당 파일은 암호화되지 않으므로 일반적으로 다른 앱에서 파일에 액세스할 수 있습니다.When an app saves files in a global location on the SD card, those files are not encrypted so they are typically accessible to other apps.

  • SD 카드가 장치에 있는 동안에는 동일한 파일 형식을 처리하도록 등록되어 있는 다른 앱에서 해당 파일에 액세스할 수 있습니다.While the SD card is in the device, your files are accessible to other apps that have registered to handle the same file type.
  • SD 카드를 장치에서 빼고 PC에서 열면 파일을 파일 탐색기에서 볼 수 있으며 다른 앱에서 액세스할 수 있습니다.When the SD card is removed from the device and opened from a PC, your files are visible in File Explorer and accessible to other apps.

SD 카드에 설치된 앱이 LocalFolder에 파일을 저장하면 해당 파일은 암호화되고 다른 앱에서 파일에 액세스할 수 없습니다.When an app installed on the SD card saves files in its LocalFolder, however, those files are encrypted and are not accessible to other apps.

SD 카드에 있는 파일에 액세스하기 위한 요구 사항Requirements for accessing files on the SD card

SD 카드에 있는 파일에 액세스하려면 일반적으로 다음 항목을 지정해야 합니다.To access files on the SD card, typically you have to specify the following things.

  1. 앱 매니페스트 파일에서 removableStorage 기능을 지정해야 합니다.You have to specify the removableStorage capability in the app manifest file.
  2. 액세스할 미디어 형식과 관련된 파일 확장명을 처리하려면 등록해야 합니다.You also have to register to handle the file extensions associated with the type of media that you want to access.

KnownFolders.MusicLibrary과 같이 알려진 폴더를 참조하지 않고도 SD 카드에 있는 미디어 파일에 액세스하거나 미디어 라이브러리 폴더 외부에 저장된 미디어 파일에 액세스하려면 이전 메서드를 사용합니다.Use the preceding method also to access media files on the SD card without referencing a known folder like KnownFolders.MusicLibrary, or to access media files that are stored outside of the media library folders.

알려진 폴더를 사용하여 미디어 라이브러리에 저장된 미디어 파일(음악, 사진 또는 동영상)에 액세스하려면 앱 매니페스트 파일에 관련 기능(musicLibrary, picturesLibrary 또는 videoLibrary)을 지정하기만 하면 됩니다.To access media files stored in the media libraries—Music, Photos, or Videos—by using known folders, you only have to specify the associated capability in the app manifest file—musicLibrary, picturesLibrary, or videoLibrary. removableStorage 접근 권한 값은 지정하지 않아도 됩니다.You do not have to specify the removableStorage capability. 자세한 내용은 음악, 사진 및 비디오 라이브러리의 파일 및 폴더를 참조하세요.For more info, see Files and folders in the Music, Pictures, and Videos libraries.

SD 카드에 있는 파일에 액세스Accessing files on the SD card

SD 카드에 대한 참조 가져오기Getting a reference to the SD card

KnownFolders.RemovableDevices 폴더는 현재 장치에 연결되어 있는 이동식 장치에 대한 논리적 루트 StorageFolder입니다.The KnownFolders.RemovableDevices folder is the logical root StorageFolder for the set of removable devices currently connected to the device. SD 카드가 있는 경우 KnownFolders.RemovableDevices 폴더 아래에 있는 첫 번째이자 유일한 StorageFolder가 SD 카드를 나타냅니다.If an SD card is present, the first (and only) StorageFolder underneath the KnownFolders.RemovableDevices folder represents the SD card.

SD 카드가 있는지 여부를 확인하고 이 카드에 대한 참조를 StorageFolder로 가져오려면 다음과 같이 코드를 사용합니다.Use code like the following to determine whether an SD card is present and to get a reference to it as a StorageFolder.

using Windows.Storage;

// Get the logical root folder for all external storage devices.
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;

// Get the first child folder, which represents the SD card.
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();

if (sdCard != null)
{
    // An SD card is present and the sdCard variable now contains a reference to it.
}
else
{
    // No SD card is present.
}

참고

SD 카드 판독기가 내장 판독기(예: 노트북이나 PC 자체의 슬롯)인 경우, KnownFolders.RemovableDevices를 통해 액세스할 수 없습니다.If your SD card reader is an embedded reader (e.g., a slot in the laptop or PC itself), it may not be accessible through KnownFolders.RemovableDevices.

SD 카드의 콘텐츠 쿼리Querying the contents of the SD card

SD 카드는 알려진 폴더로 인식되지 않는 파일과 많은 폴더를 포함할 수 있으며 KnownFolders에서 위치를 사용하여 쿼리할 수 없습니다.The SD card can contain many folders and files that aren't recognized as known folders and can't be queried by using a location from KnownFolders. 파일을 찾으려면 앱이 파일 시스템을 재귀적으로 트래버스하여 카드의 콘텐츠를 열거해야 합니다.To find files, your app has to enumerate the contents of the card by traversing the file system recursively. SD 카드의 콘텐츠를 효율적으로 가져오려면 GetFilesAsync (CommonFileQuery.DefaultQuery) GetFoldersAsync (CommonFolderQuery.DefaultQuery) 를 사용합니다.Use GetFilesAsync (CommonFileQuery.DefaultQuery) and GetFoldersAsync (CommonFolderQuery.DefaultQuery) to get the contents of the SD card efficiently.

백그라운드 스레드를 사용하여 SD 카드를 트래버스하는 것이 좋습니다.We recommend that you use a background thread to traverse the SD card. SD 카드는 수기가바이트의 데이터를 포함할 수 있습니다.An SD card may contain many gigabytes of data.

사용자에게 폴더 선택기를 사용하여 특정 폴더를 선택하도록 요청하는 메시지가 앱에서 표시될 수 있습니다.Your app can also require the user to choose specific folders by using the folder picker.

KnownFolders.RemovableDevices에서 파생된 경로를 사용하여 SD 카드에 있는 파일 시스템에 액세스하는 경우, 다음 메서드는 다음과 같은 방법으로 동작합니다.When you access the file system on the SD card with a path that you derived from KnownFolders.RemovableDevices, the following methods behave in the following way.

  • GetFilesAsync 메서드는 사용자가 처리하기 위해 등록한 파일 확장명과 사용자가 지정한 모든 미디어 라이브러리 접근 권한 값과 관련된 파일 확장명의 합집합을 반환합니다.The GetFilesAsync method returns the union of the file extensions that you have registered to handle and the file extensions associated with any media library capabilities that you have specified.
  • 액세스하려는 파일의 파일 확장명을 처리하도록 등록하지 않은 경우 GetFileFromPathAsync 메서드가 실패합니다.The GetFileFromPathAsync method fails if you have not registered to handle the file extension of the file you are trying to access.

개별 SD 카드 식별Identifying the individual SD card

SD 카드를 처음 끼우면 운영 체제에서 카드의 고유 식별자를 생성합니다.When the SD card is first mounted, the operating system generates a unique identifier for the card. 이 ID는 카드 루트의 WPSystem 폴더에 있는 파일에 저장됩니다.It stores this ID in a file in the WPSystem folder at the root of the card. 앱은 이 ID를 사용하여 카드 식별 여부를 결정합니다.An app can use this ID to determine whether it recognizes the card. 앱이 카드를 인식하는 경우 앱은 이전에 완료된 특정 작업을 지연할 수 있습니다.If an app recognizes the card, the app may be able to postpone certain operations that were completed previously. 하지만 앱에서 마지막으로 카드에 액세스한 이후로 카드의 콘텐츠가 변경되었을 수 있습니다.However the contents of the card may have changed since the card was last accessed by the app.

예를 들어 전자책을 인덱싱하는 앱을 생각해 보겠습니다.For example, consider an app that indexes ebooks. 앱이 이전에 전체 SD 카드에서 전자책 파일을 검사하고 전자책의 색인을 만든 경우에는 카드를 다시 끼우고 앱이 카드를 인식하면 즉시 목록을 표시할 수 있습니다.If the app has previously scanned the whole SD card for ebook files and created an index of the ebooks, it can display the list immediately if the card is reinserted and the app recognizes the card. 별도로, 우선 순위가 낮은 백그라운드 스레드를 시작하여 새로운 전자책을 검색할 수 있습니다.Separately it can start a low-priority background thread to search for new ebooks. 또한 오류를 처리함으로써, 사용자가 삭제된 전자책에 액세스하려고 하면 이전에 있던 전자책을 찾을 수도 있습니다.It can also handle a failure to find an ebook that existed previously when the user tries to access the deleted ebook.

이 ID가 포함된 속성의 이름은 WindowsPhone.ExternalStorageId입니다.The name of the property that contains this ID is WindowsPhone.ExternalStorageId.

using Windows.Storage;

// Get the logical root folder for all external storage devices.
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;

// Get the first child folder, which represents the SD card.
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();

if (sdCard != null)
{
    var allProperties = sdCard.Properties;
    IEnumerable<string> propertiesToRetrieve = new List<string> { "WindowsPhone.ExternalStorageId" };

    var storageIdProperties = await allProperties.RetrievePropertiesAsync(propertiesToRetrieve);

    string cardId = (string)storageIdProperties["WindowsPhone.ExternalStorageId"];

    if (...) // If cardID matches the cached ID of a recognized card.
    {
        // Card is recognized. Index contents opportunistically.
    }
    else
    {
        // Card is not recognized. Index contents immediately.
    }
}