このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

FileSystemHandle

Baseline
広く利用可能
*

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2023年3月以降、すべてのブラウザーで利用可能です。

* この機能の一部は、対応レベルが異なる場合があります。

安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

メモ: この機能はウェブワーカー内で利用可能です。

FileSystemHandle はファイルシステム API のインターフェイスで、ファイルまたはディレクトリーの項目を表すオブジェクトです。複数のハンドルが同じ項目を表す可能性もあります。ほとんどの場面では、FileSystemHandle を直接扱う場面はほとんどなく、子インターフェイスの FileSystemFileHandle や FileSystemDirectoryHandle を扱います。

FileSystemHandle がもととなるインターフェイス

以下が、FileSystemHandle インターフェイスがもととなっているインターフェイスの一覧です。

FileSystemFileHandle

ファイル項目のハンドルを表します。

FileSystemDirectoryHandle

ディレクトリー項目へのハンドルを提供します。

インスタンスプロパティ

kind 読取専用

項目の種類を返します。対応する項目がファイルの時は 'file'、そうでなければ 'directory' です。

name 読取専用

対応する項目の名前を返します。

インスタンスメソッド

isSameEntry()

2 つのハンドルを比較し、対応する項目 (ファイルまたはディレクトリー) が一致するかを調べます。

queryPermission()

現在のハンドルの現在の許可の状態を取得します。

remove()

下層のファイルシステムからハンドルが表す項目を削除することを要求します。

requestPermission()

ファイルハンドルについて、読み取りまたは読み書きの許可を要求します。

例

種類を調べる

以下のコードでは、ユーザーにファイルピッカーでファイルを選択させ、返されたハンドルがファイルなのかディレクトリーなのかを調べます。

js
// ファイルハンドルへの参照を保存する
let fileHandle;

async function getFile() {
  // ファイルピッカーを開く
  [fileHandle] = await window.showOpenFilePicker();

  if (fileHandle.kind === "file") {
    // ファイルの場合のコードを実行する
  } else if (fileHandle.kind === "directory") {
    // ディレクトリーの場合のコードを実行する
  }
}

許可を確認 / 要求する

以下の非同期関数は、ユーザーがファイルハンドルに読み取りまたは読み書きの許可を与えている場合 true を返します。許可が与えられていない場合、許可を要求します。

js
// fileHandle は FileSystemFileHandle
// withWrite は書き込みなら true に設定される論理値

async function verifyPermission(fileHandle, withWrite) {
  const opts = {};
  if (withWrite) {
    opts.mode = "readwrite";
  }

  // 既に許可が得られているかを確認し、許可が得られていれば true を返す
  if ((await fileHandle.queryPermission(opts)) === "granted") {
    return true;
  }

  // ファイル操作の許可を要求し、ユーザーが許可すれば true を返す
  if ((await fileHandle.requestPermission(opts)) === "granted") {
    return true;
  }

  // ユーザーが許可しなかったので、false を返す
  return false;
}

項目を比較する

以下の関数は、1 個の項目を項目の配列と比較し、一致する項目をすべて取り除いた新しい配列を返します。

js
function removeMatches(fileEntry, entriesArr) {
  const newArr = entriesArr.filter((entry) => !fileEntry.isSameEntry(entry));

  return newArr;
}

仕様書

仕様書
File System
# api-filesystemhandle

ブラウザーの互換性

関連情報