最近使ったファイルやフォルダーを追跡する方法 (HTML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

ユーザーが頻繁にアクセスするファイルを追跡するには、そのファイルを最近使ったアプリの一覧に追加します。この mostRecentlyUsedList は、最後にアクセスした日時に基づいて項目を並べ替えたり、一覧の上限である 25 項目に達したら最も古い項目を削除したりして、プラットフォームが管理しています。すべてのアプリにはそれぞれに専用の mostRecentlyUsedList があります。

通常、最近使用したアプリの一覧 (MRU) は、ユーザーが最近使ったファイルを追跡するときに最も役立ちますが、フォルダーを追跡するときにも使うことができます。最近使用したアプリの一覧 (MRU) にはファイルとフォルダーの両方を格納できます。項目は IStorageItem オブジェクトとして格納されます。つまり、storageFile オブジェクト (ファイルを表す) と storageFolder オブジェクト (フォルダーを表す) は、どちらも MRU に追加されます。

必要条件

ファイル アクセスとアクセス許可

アプリが既定でアクセスできるファイルや場所、アプリがその他のファイルや場所にアクセスできる方法について説明します。

クイック スタート: ファイル ピッカーによるファイルへのアクセス

ユーザーがアプリで操作するファイルを選ぶことができるようにする方法について説明します。選ばれるファイルは、ユーザーが何度も選ぶファイルであることもあります。

関連するサンプル

ファイル アクセスのサンプル

ファイル ピッカーのサンプル

MRU に選んだファイルを追加する

ユーザーは同じファイルを何回も選ぶことがあります。そのため、ユーザーがファイルを選ぶ場合は、そのファイルを最近使用したアプリの一覧 (MRU) に追加することを強くお勧めします。ファイルを選んですぐに MRU に簡単に追加されるようにするには、次の手順に従います。

  1. アプリでユーザーがファイルやフォルダーを選ぶことができるコードを探します。

    コードがどこにあるかわからない場合やファイル ピッカーを使ってファイルにアクセスする方法がわからない場合は、「クイック スタート: ファイル ピッカーによるファイルへのアクセス」を読んでから次に進んでください。

    たとえば、ユーザーがファイル 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" (プロフィール画像) に設定してファイルの目的を取得します。 メタデータなしで MRU にファイルを追加するには、add(fileOrFolder) を呼び出します。

    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 で 1 番目の項目であるファイルのトークンを入手し、そのトークンを使ってそのファイルを表す 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 
    }
);

この例では 1 番目の項目がファイルであることがわかっていました。なぜなら mostRecentlyUsedList にはファイル 1 つを追加しただけだったためです。

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 はプラットフォームによって管理されません。1,000 項目の上限に達すると、別の項目を追加する前に一覧から項目を自分で削除する必要があります。これを行うには、remove メソッドを使います。

すべてのアプリには、既定でそれぞれに専用の mostRecentlyUsedListfutureAccessList があります。