최근에 사용한 파일 및 폴더를 추적하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

사용자가 자주 액세스하는 파일을 앱의 최근에 사용한 목록에 추가하여 추적할 수 있습니다. 플랫폼은 마지막으로 액세스한 시간을 기반으로 항목을 정렬하고 목록의 25개 항목 제한에 도달한 경우 가장 오래된 항목을 제거하여 mostRecentlyUsedList를 자동으로 관리합니다. 모든 앱에는 자체 mostRecentlyUsedList가 있습니다.

일반적으로 앱의 MRU(최근에 사용한 목록)는 사용자가 최근에 사용한 파일을 추적하는 데 가장 유용하지만 MRU를 사용하여 폴더를 추적할 수도 있습니다. 앱의 MRU(최근에 사용한 목록)에 파일과 폴더를 모두 저장할 수 있습니다. 항목은 IStorageItem 개체로 저장되어 파일을 나타내는 storageFile 개체와 폴더를 나타내는 storageFolder 개체를 모두 MRU에 추가할 수 있습니다.

사전 요구 사항

파일 액세스 및 사용 권한

앱에서 기본적으로 액세스할 수 있는 파일 및 위치와 앱이 추가 파일 및 위치에 대한 액세스 권한을 얻을 수 있는 방법을 설명합니다.

빠른 시작: 파일 선택기를 사용하여 파일에 액세스

사용자가 앱이 작동할 수 있는 파일을 선택하는 방법을 설명합니다. 선택한 파일은 종종 사용자가 반복해서 열어 보는 파일과 동일한 파일입니다.

관련 샘플

파일 액세스 샘플

파일 선택기 샘플

MRU에 선택한 파일 추가

사용자가 선택하는 파일은 종종 사용자가 반복해서 열어 보는 파일입니다. 따라서 사용자가 파일을 선택하면 앱의 MRU(최근에 사용한 목록)에 해당 파일을 추가할 것을 고려해야 합니다. 다음 단계에 따라 파일이 선택된 후 바로 MRU에 손쉽게 추가할 수 있습니다.

  1. 앱에서 사용자가 파일 및/또는 폴더를 선택할 수 있도록 하는 코드를 찾습니다.

    이 코드가 있는 위치를 확실히 모르거나 파일 선택기를 사용하여 파일에 액세스하는 방법을 모르는 경우에는 계속하기 전에 빠른 시작: 파일 선택기를 사용하여 파일에 액세스를 읽어 보세요.

    예를 들어 사용자가 단일 파일을 선택할 수 있도록 하는 경우 코드는 다음과 같습니다.

    var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
    openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
    openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.picturesLibrary;
    openPicker.fileTypeFilter.replaceAll([".png", ".jpg", ".jpeg"]);
    
    // Open the picker for the user to pick a file
    openPicker.pickSingleFileAsync().done(function (pickedFile) {
        if (pickedFile) {
            // Process picked file       
        } else {
            // Canceled; no file was picked
        }
    });
    

    비동기 호출이 반환되면(이 예제의 pickSingleFileAsync) 사용자가 선택한 파일이 storageFile로 반환됩니다. done을 사용하여 선택한 파일(이 예제의 pickedFile)을 처리 함수(이 예제의 익명 함수)로 전달하면 이 함수가 파일을 mostRecentlyUsedList에 추가합니다.

    사용자가 파일 대신 폴더를 선택할 수 있도록 하려는 경우 코드는 pickSingleFolderAsync를 사용하고 선택한 폴더는 storageFolder로 반환됩니다.

  2. 선택한 파일을 다음과 같은 코드 줄의 처리 함수 내에 있는 MRU(최근에 사용한 목록)에 추가합니다.

    
            var mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.add(pickedFile, pickedFile.name);
    

    mostRecentlyUsedList.add가 오버로드됩니다. 이 예제에서는 메타데이터를 파일과 연결할 수 있도록 add(fileOrFolder, metadata)를 사용합니다. 메타데이터를 설정하면 항목의 용도 등 추가 정보를 캡처할 수 있습니다. 이 예제에서는 메타데이터를 "profile pic"으로 설정하여 파일의 용도를 캡처합니다. add(fileOrFolder)을 호출하면 메타데이터 없이 파일을 MRU에 추가할 수 있습니다.

    항목을 MRU에 add할 때마다 메서드는 항목을 검색하는 데 사용되는 고유하게 식별되는 문자열(토큰)을 반환합니다. 이 예제에서는 mruToken 로컬 변수에서 이 토큰을 캡처하지만 이 토큰으로 특별한 작업을 수행하지는 않습니다.

       토큰을 사용하여 MRU에서 항목을 검색해야 하기 때문에 나중에 사용할 수 있도록 토큰을 앱 데이터에 저장하는 것이 좋습니다. 예를 들어 앱에서 프로필 사진을 MRU에 추가하는 경우(이 예제에서와 같이) 사용자의 프로필 사진을 추적하는 앱 데이터의 목록에 토큰을 저장해야 할 수 있습니다. 앱 데이터에 대한 자세한 내용은 응용 프로그램 데이터 관리를 참조하세요.

     

    처리 함수는 이제 다음과 같습니다.

    openPicker.pickSingleFileAsync().done(function (pickedFile) {
        if (pickedFile) {
            // Add picked file to MRU
            var mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.add(pickedFile, pickedFile.name);
    
            // Continue processing picked file      
        } else {
            // Canceled; no file was picked
        }
    });
    

토큰을 사용하여 MRU에서 항목 검색

mostRecentlyUsedList에서 항목을 검색하려면 해당 항목에 대한 토큰이 필요합니다. 검색하려는 항목에 가장 적합한 검색 방법을 사용해야 합니다.

예를 들어 MRU에서 첫 번째 항목인 파일에 대한 토큰을 가져온 다음 토큰을 사용하여 파일을 나타내는 storageFile을 검색합니다. 다음 코드를 참조하세요.

var mruFirstToken = Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.entries.first.token;
Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.getFileAsync(mruFirstToken).done(
    function (retrievedFile) {
        // Process retrieved file
    },
    function (error) {
        // Handle errors 
    }
);

mostRecentlyUsedList에 파일 하나만 추가했기 때문에 이 예제에서 첫 번째 항목은 파일임을 알 수 있습니다.

MRU에서 모든 항목에 대한 토큰 검색

다음과 같이 항목을 반복하여 목록에 있는 모든 항목에 대한 토큰을 검색할 수 있습니다.

var mruEntries = Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.entries;
if (mruEntries.size > 0) {
    mruEntries.forEach(function (entry) {
        var mruToken = entry.token;
        // Continue processing the MRU entry
    });
} else {
    // Handle empty MRU
}

이러한 항목은 항목에 대한 토큰과 메타데이터가 포함된 accessListEntry 구조입니다. 이 항목에는 항목 자체는 포함되지 않으며 연결된 항목을 직접 검색하는 데 사용할 수 없습니다.

대신 accessListEntry를 사용하여 연결된 항목에 대한 토큰을 검색한 다음 이전 섹션 토큰을 사용하여 MRU에서 항목 검색에 나열된 메서드 중 하나를 사용하여 항목을 검색합니다. 이 예제에서는 mruToken 로컬 변수에서 각 항목에 대한 토큰을 캡처하지만 이 토큰으로 특별한 작업을 수행하지는 않습니다.

accessListEntry에 저장된 메타데이터는 항목에 대한 추가 정보가 포함된 문자열입니다. mostRecentlyUsedList에 항목을 추가할 때 정보를 지정할 수 있습니다.

설명

25개 항목 제한에 도달할 경우 MRU에서 항목 제거

MRU의 25개 항목 제한에 도달한 후 새 항목을 추가하려고 하면 Windows는 자동으로 가장 오래된 항목(가장 오래 전에 액세스한 항목)을 제거합니다. 따라서 MRU에 최대 항목 개수(25)가 포함되어 있더라도 새 항목을 추가하기 전에 항목을 제거할 필요가 없습니다.

25개 항목 제한을 넘긴 후에 파일 및 폴더에 대한 액세스 유지

최근에 사용한 목록 외에 앱에는 파일 및 폴더에 대한 앱의 액세스를 유지하는 데 사용할 수 있는 향후 액세스 목록(futureAccessList)이 있습니다.

사용자가 파일이나 폴더를 선택하면 이 항목을 앱의 mostRecentlyUsedListfutureAccessList에 모두 추가하는 것이 좋습니다. 파일이나 폴더를 futureAccessList에 추가하면 사용자가 해당 항목을 자주 열어 보지 않는 경우에도 앱에서 이 항목에 대한 액세스를 유지할 수 있습니다.

futureAccessList로 작업하는 방식은 다음 두 가지 면에서 MRU로 작업하는 방식과 다릅니다.

  • futureAccessList에는 최대 1000개의 항목을 저장할 수 있습니다.
  • MRU와 달리 플랫폼에서는 futureAccessList를 자동으로 관리하지 않습니다. 1000개 항목 제한에 도달하면 항목을 더 추가하기 전에 목록에서 항목을 제거해야 합니다. 이 작업을 수행하려면 remove 메서드를 사용합니다.

모든 앱에는 기본적으로 자체 mostRecentlyUsedListfutureAccessList가 있습니다.