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

View in English Always switch to English

FileSystemSyncAccessHandle.close()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2023年3月⁩.

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

FileSystemSyncAccessHandle インターフェイスの close() メソッドは、開かれている同期式ファイルハンドルを閉じます。これ以降操作はできなくなり、ファイルハンドルに対応するファイルにかけた排他的ロックを解除します。

構文

js
close()

引数

なし

返値

undefined で解決する Promise を返します。

例外

なし

以下の非同期のイベントハンドラー関数は、Web Worker の中にあります。メインスレッドからメッセージを受信すると、以下の動作をします。

  • 同期式ファイルアクセスハンドルを作成します。
  • ファイルのサイズを取得し、格納用の ArrayBuffer を作成します。
  • ファイルの内容をバッファーに読み込みます。
  • メッセージをエンコードし、ファイルの終端に書き込みます。
  • 変更をディスクに書き込み、アクセスハンドルを閉じます。
js
onmessage = async (e) => {
  // メインスクリプトからの処理対象のメッセージを取得する
  const message = e.data;

  // draft ファイルのハンドルを取得する
  const root = await navigator.storage.getDirectory();
  const draftHandle = await root.getFileHandle("draft.txt", { create: true });
  // 同期式アクセスハンドルを取得する
  const accessHandle = await draftHandle.createSyncAccessHandle();

  // ファイルのサイズを取得する
  const fileSize = accessHandle.getSize();
  // ファイルの内容をバッファーに読み込む
  const buffer = new DataView(new ArrayBuffer(fileSize));
  const readBuffer = accessHandle.read(buffer, { at: 0 });

  // メッセージをファイルの終端に書き込む
  const encoder = new TextEncoder();
  const encodedMessage = encoder.encode(message);
  const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });

  // 変更をディスクに書き込む
  accessHandle.flush();

  // 完了したら、常に FileSystemSyncAccessHandle を閉じる
  accessHandle.close();
};

メモ: 仕様書の以前のバージョンでは、close()flush()getSize()truncate() は誤って非同期メソッドとされていました。これは現在では変更されていますが、まだ非同期バージョンをサポートしているブラウザーもあります。

仕様書

Specification
File System
# api-filesystemsyncaccesshandle-close

ブラウザーの互換性

関連情報