クイック スタート: プログラムによるファイルへのアクセス (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
フォルダー、ライブラリ、デバイス、ネットワークの場所などの場所にあるファイルとフォルダーにアクセスします。ファイルやフォルダーのクエリを作成することで、ある場所にあるファイルやフォルダーのクエリを実行することもできます。
必要条件
JavaScript を使った Windows ランタイム アプリの非同期プログラミングについての理解
非同期アプリの作成方法については、「クイック スタート: JavaScript での promise の使用」をご覧ください。
場所へのアクセス許可
たとえば、これらの例のコードではピクチャ ライブラリ機能が必要ですが、場所によっては別の機能が必要であったり、機能をまったく必要としない場合もあります。詳しくは、「ファイル アクセスとアクセス許可」をご覧ください。ファイル ピッカーを使ってファイルやフォルダーにアクセスする方法については、「クイック スタート: ファイル ピッカーによるファイルへのアクセス」をご覧ください。
ある場所の最上位のファイルやフォルダーを列挙する
場所を表す StorageFolder を取得します。
特定のフォルダーの内容の一覧を取得するには、最初にその場所を表す StorageFolder オブジェクトを取得する必要があります。
FolderEnumeration サンプルは、次のように、画像ライブラリの取得方法を示しています。
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
前の例では、KnownFolders を使って (StorageFolder オブジェクトとして) 画像ライブラリを取得しています。KnownFolders プロパティを使うと、ライブラリ、デバイス、ネットワークの場所などのさまざまなユーザー リソースを表すフォルダーを取得できます。
重要 KnownFolders プロパティを使ってライブラリ、デバイス、またはネットワークの場所にアクセスする場合は、アプリのアプリ マニフェストで対応する機能が指定されている必要があります。ファイル アクセスと機能について詳しくは、「ファイル アクセスとアクセス許可」と「Windows ランタイムを使用したユーザー リソースへのアクセス」をご覧ください。
フォルダーの内容の一覧を取得します。
FolderEnumeration サンプルは、次のように、画像ライブラリの項目の一覧の取得方法を示しています。
picturesLibrary.getItemsAsync().then(function (items) {
この例に示すように、フォルダー (StorageFolder オブジェクト) のすべての内容の一覧を取得するために、getItemsAsync() を呼び出すことができます。一部の項目だけが必要な場合には、getItemsAsync(startIndex, maxItemsToRetrieve) を呼び出してインデックスの範囲でフォルダーの内容を取得できます。
フォルダーで getItemsAsync メソッドを呼び出したときには、受け取る項目の一覧はそのフォルダー内のファイルとサブフォルダーに限られ、サブフォルダーに含まれるファイルやフォルダーは含まれません。
フォルダー内のファイルの一覧が必要な場合には、getFilesAsync メソッドを呼び出すことができます。フォルダーの一覧が必要な場合には、getFoldersAsync メソッドを呼び出すことができます。
取得操作の後に then を使って、取得したオブジェクトの一覧 (前の例では
items
) を受け取る関数を定義し、必要な追加タスクを実行します。一覧を操作します。
FolderEnumeration サンプルは、次のように、画像ライブラリの
items
の一覧に対する追加のタスクの実行方法を示しています。outputHeader(picturesLibrary.name, items.size); items.forEach(function (item) { if (item.isOfType(Windows.Storage.StorageItemTypes.folder)) { output(id(picturesLibrary.name), item.name + "\\"); } else { output(id(picturesLibrary.name), item.fileName); } });
この例では、フォルダーの name と一覧の
size
をヘルパー関数に渡し、そこでこの情報をユーザーに表示します。例に示したように、項目の一覧を反復処理して追加タスクを実行することもできます。項目の一覧で
forEach
を呼び出して一覧内の項目を反復処理します。forEach
に渡した関数は、引数として一覧項目を取り、一覧内のそれぞれのitem
に対して実行されます。各
item
に対して個別にメソッドを呼び出してさらに処理できます。前の例では、item
がフォルダー (StorageFolder オブジェクト) かファイル (StorageFile オブジェクト) を、isOfType メソッドにファイルとフォルダーを StorageItemTypes の列挙値で渡した結果と比較して決めています。この比較は、項目についての異なる情報をoutput
ヘルパー関数に渡すために行っていますが、他にも多くのタスクを実行できます。その他のコンテキストや
outputHeader
関数とoutput
関数の動作については、FolderEnumeration サンプルをダウンロードしてください。
完了すると、コードは次のようになります。
// Get folder
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
// Get folder contents
picturesLibrary.getItemsAsync().then(function (items) {
// Then perform tasks with the list of files and folders that was retrieved
// For example, display name of containing folder and count of items in folder
outputHeader(picturesLibrary.name, items.size);
// For example, display info for each item
items.forEach(function (item) {
if (item.isOfType(Windows.Storage.StorageItemTypes.folder)) {
output(id(picturesLibrary.name), item.name + "\\");
}
else {
output(id(picturesLibrary.name), item.fileName);
}
});
});
ある場所のファイルのクエリを実行する
1 つ上のフォルダーを取得します。
特定のフォルダーの内容の一覧を取得するには、最初にそのフォルダーを取得する必要があります。
FolderEnumeration サンプルは、次のように、画像ライブラリの取得方法を示しています。
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
前の例では、KnownFolders を使って (StorageFolder オブジェクトとして) 画像ライブラリを取得しています。KnownFolders プロパティを使うと、ライブラリ、デバイス、ネットワークの場所などのさまざまなユーザー リソースを表すフォルダーを取得できます。
重要 KnownFolders プロパティを使ってライブラリ、デバイス、またはネットワークの場所にアクセスする場合は、アプリのアプリ マニフェストで対応する機能が指定されている必要があります。ファイル アクセスと機能について詳しくは、「ファイル アクセスとアクセス許可」と「Windows ランタイムを使用したユーザー リソースへのアクセス」をご覧ください。
フォルダー クエリを作成して指定どおりにファイルを整理します。
フォルダーからフォルダー クエリを作成すると、そのフォルダーとサブフォルダー内のファイルが条件に基づいてグループに分類されます。分類後のグループは、ファイル システム内のフォルダーのすべての機能を持つ仮想フォルダーなので、必要に応じてそのフォルダー内のファイルを取得して処理することができます。
FolderEnumeration サンプルは、次のように、画像ライブラリ内の画像を撮影または作成された月別にグループ化するフォルダー クエリの作成方法を示しています。
var query = picturesLibrary.createFolderQuery(Windows.Storage.Search.CommonFolderQuery.groupByMonth);
この例に示すように、フォルダー クエリ (StorageFolderQueryResult オブジェクト) を作成して、そのフォルダーとサブフォルダー内のファイルを指定した CommonFolderQuery 値に基づいて仮想フォルダーに分類するために、フォルダーで createFolderQuery(query) を呼び出すことができます。この例では、
picturesLibrary
フォルダー内の画像ファイルを撮影または作成された月 (CommonFolderQuery.groupByMonth) に基づいて仮想フォルダーにグループ化するようにしました。フォルダー クエリは、createFolderQuery() または createFolderQueryWithOptions を呼び出して作成することもできます。
クエリから仮想フォルダーの一覧を取得します。
アプリのサンプルのページの FolderEnumeration サンプルは、
query
を使って仮想フォルダーの一覧を取得しています。query.getFoldersAsync().then(function (monthList) { monthList.forEach(function (month) {
この例に示すように、仮想フォルダーの一覧を取得するために、フォルダー クエリで getFoldersAsync() を呼び出すことができます。then を使って、一覧を処理する関数を定義します。この例では、クエリによって月を表す仮想フォルダーの一覧 (
monthList
) が返されます。この一覧を処理するために、monthList.forEach
を呼び出して各month
フォルダーを処理する関数を定義します。仮想フォルダー内のファイルの一覧を取得します。
FolderEnumeration サンプルは、次のように、
month
フォルダーを使ってその月に撮影または作成された画像の一覧を取得する方法を示しています。var tempMonthName = month.name; month.getFilesAsync().then(function (files) {
ヒント 仮想フォルダー (
month
) に関する情報を保存して後で使えるようにすることが必要になる場合もあります。この例では、仮想フォルダーの名前 (month
.name) をtempMonthName
に保存して、画像の一覧 (files
) を処理するときに使えるようにします。then を使って、受け取るファイルの一覧を処理する関数を定義します。
完了すると、コードは次のようになります。
// Get folder
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
// Create query
var query = picturesLibrary.createFolderQuery(Windows.Storage.Search.CommonFolderQuery.groupByMonth);
// Get virtual folders from query
query.getFoldersAsync().then(function (monthList) {
monthList.forEach(function (month) {
var tempMonthName = month.name;
// Get files from virtual folder
month.getFilesAsync().then(function (files) {
// Then perform tasks with retrieved files
});
});
});
要約と次のステップ
ファイルの読み取りと書き込みについて詳しくは、「クイック スタート: ファイルの読み取りと書き込み」と、ファイル アクセスのサンプルをご覧ください。画像ファイルの操作について詳しくは、「画像の選択方法と表示方法」または「画像をデコードする方法」と、Blob を使ってコンテンツの保存と読み込みを行うサンプルをご覧ください。
ファイル ピッカーでファイルにアクセスする方法については、「クイック スタート: ファイル ピッカーによるファイルへのアクセス」をご覧ください。
関連トピック
クイック スタート: ファイル ピッカーによるファイルへのアクセス
Blob を使ってコンテンツの保存と読み込みを行うサンプルに関するページ
辞書/リファレンス
Windows.Storage.KnownFolders class
Windows.Storage.StorageFile class
Windows.Storage.StorageFolder class
Windows.Storage.StorageItemTypes enum