FileSystemSyncAccessHandle.read()
        
        
          
                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 インターフェイスの read() メソッドは、ハンドルに対応するファイルの内容を指定のバッファーに読み込みます。オフセットを指定することもできます。
構文
read(buffer, FileSystemReadWriteOptions)
引数
- buffer
- 
ファイルの内容を読み込むバッファーを表す ArrayBufferまたは (DataViewなどの)ArrayBufferViewです。ArrayBufferの内容を直接操作することはできないことに注意してください。かわりに、バッファーを特定のフォーマットで表すInt8Arrayなどの型付き配列のうちの一つ、もしくはDataViewのオブジェクトを作成し、それを用いてバッファーの内容を読み書きします。
- FileSystemReadWriteOptions省略可
- 
以下のプロパティを持つオプションオブジェクトです。 - at
- 
ファイルをどこから読み込むかのバイト単位のオフセットを表す数値です。 
 
返値
ファイルから読み込んだバイト数を表す数値で解決する Promise を返します。
例外
- InvalidStateError- DOMException
- 
対応するアクセスハンドルが既に閉じられているとき投げられます。 
例
以下の非同期のイベントハンドラー関数は、Web Worker の中にあります。メインスレッドからメッセージを受信すると、以下の動作をします。
- 同期式アクセスハンドルを作成します。
- ファイルのサイズを取得し、格納用の ArrayBufferを作成します。
- ファイルの内容をバッファーに読み込みます。
- メッセージをエンコードし、ファイルの終端に書き込みます。
- 変更をディスクに書き込み、アクセスハンドルを閉じます。
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-read> | 
ブラウザーの互換性
Loading…