FileSystemChangeRecord

FileSystemChangeRecord 字典是 File System API 的一部分,其中包含由 FileSystemObserver 觀察到的單個更改的詳細資訊。

傳遞給 FileSystemObserver() 建構函式的回撥函式中的 records 引數是一個 FileSystemChangeRecord 物件陣列。

例項屬性

changedHandle

一個指向觀察到更改的檔案的檔案系統控制代碼的引用。

對於型別為 "disappeared""errored""unknown" 的記錄,此屬性將為 null

relativePathComponents

一個包含路徑元件的陣列,這些元件構成從 rootchangedHandle 的相對檔案路徑,包括 changedHandle 的檔名。

relativePathMovedFrom

在型別為 "moved" 的觀察情況下,一個包含路徑元件的陣列,這些元件構成從 rootchangedHandle 之前位置的相對檔案路徑。如果型別不是 "moved",則此屬性將為 null

對根檔案系統控制代碼的引用,即傳遞給啟動觀察的 observe() 呼叫的控制代碼。同樣,這可以是 FileSystemFileHandleFileSystemDirectoryHandleFileSystemSyncAccessHandle

type

表示觀察到的更改型別的字串。可能的值包括:

appeared

檔案或目錄已在 root 檔案結構中建立或移入。

disappeared

檔案或目錄已在 root 檔案結構中刪除或移出。要找出消失的檔案或目錄,可以查詢 relativePathComponents 屬性。

errored

在觀察到的目錄中發生了錯誤狀態。這可能發生在

  • 觀察不再有效。當被觀察的控制代碼(即觀察的 root)被刪除或移動時,可能會發生這種情況。在這種情況下,將記錄一條 "disappeared" 觀察,然後是一條 "errored" 觀察。在這種情況下,您可能希望使用 FileSystemObserver.disconnect() 停止觀察檔案系統。
  • 已達到每個源的觀察最大限制。此限制取決於作業系統,並且無法預先知道。如果發生這種情況,網站可以嘗試重試,但不能保證作業系統會釋放足夠的資源。
  • 對目錄或檔案控制代碼的訪問許可權被移除。
modified

檔案或目錄已修改。

moved

檔案或目錄已在根檔案結構內移動。

注意:在 Windows 上,"moved" 觀察不支援在目錄之間進行。它們在源目錄中報告為 "disappeared" 觀察,在目標目錄中報告為 "appeared" 觀察。

unknown

表示某些觀察被遺漏了。如果您想了解有關遺漏觀察中發生了什麼變化的詳細資訊,可以回退到輪詢觀察到的目錄。

根據作業系統,並非所有觀察都會以相同的詳細程度報告,例如,當目錄的內容遞迴更改時。最好的情況是,網站將收到一條詳細的更改記錄,其中包含更改型別和一個指向受影響路徑的控制代碼。最壞的情況是,網站將收到一條更通用的更改記錄(即,型別為 "unknown"),仍然需要它來列舉目錄以確定哪個控制代碼發生了更改。

這仍然比輪詢有所改進,因為目錄列舉可以從回撥函式按需啟動,而不是需要定期輪詢更改。

示例

初始化 FileSystemObserver

在您開始觀察檔案或目錄更改之前,您需要初始化一個 FileSystemObserver 來處理這些觀察。這是使用 FileSystemObserver() 建構函式完成的,該建構函式接受一個回撥函式作為引數。

js
const observer = new FileSystemObserver(callback);

您可以在 records 陣列中的每個物件是 FileSystemChangeRecord 物件 回撥函式 體中指定以您想要的任何方式返回和處理檔案更改觀察。

js
const callback = (records, observer) => {
  for (const record of records) {
    console.log("Change detected:", record);
    const reportContent = `Change observed to ${record.changedHandle.kind} ${record.changedHandle.name}. Type: ${record.type}.`;
    sendReport(reportContent); // Some kind of user-defined reporting function
  }

  observer.disconnect();
};

規範

目前不是規範的一部分。請參閱 https://github.com/whatwg/fs/pull/165 以獲取相關的規範 PR。

另見