FileSystemChangeRecord
FileSystemChangeRecord 字典是 File System API 的一部分,其中包含由 FileSystemObserver 觀察到的單個更改的詳細資訊。
傳遞給 FileSystemObserver() 建構函式的回撥函式中的 records 引數是一個 FileSystemChangeRecord 物件陣列。
例項屬性
changedHandle-
一個指向觀察到更改的檔案的檔案系統控制代碼的引用。
- 對於使用者可觀察的檔案系統,這可以是
FileSystemFileHandle或FileSystemDirectoryHandle。 - 對於 源私有檔案系統 (OPFS),它可以是
FileSystemFileHandle、FileSystemDirectoryHandle或FileSystemSyncAccessHandle。
對於型別為
"disappeared"、"errored"或"unknown"的記錄,此屬性將為null。 - 對於使用者可觀察的檔案系統,這可以是
relativePathComponents-
一個包含路徑元件的陣列,這些元件構成從
root到changedHandle的相對檔案路徑,包括changedHandle的檔名。 relativePathMovedFrom-
在型別為
"moved"的觀察情況下,一個包含路徑元件的陣列,這些元件構成從root到changedHandle之前位置的相對檔案路徑。如果型別不是"moved",則此屬性將為null。 根-
對根檔案系統控制代碼的引用,即傳遞給啟動觀察的
observe()呼叫的控制代碼。同樣,這可以是FileSystemFileHandle、FileSystemDirectoryHandle或FileSystemSyncAccessHandle。 type-
表示觀察到的更改型別的字串。可能的值包括:
appeared-
檔案或目錄已在
root檔案結構中建立或移入。 disappeared-
檔案或目錄已在
root檔案結構中刪除或移出。要找出消失的檔案或目錄,可以查詢relativePathComponents屬性。 errored-
在觀察到的目錄中發生了錯誤狀態。這可能發生在
- 觀察不再有效。當被觀察的控制代碼(即觀察的
root)被刪除或移動時,可能會發生這種情況。在這種情況下,將記錄一條"disappeared"觀察,然後是一條"errored"觀察。在這種情況下,您可能希望使用FileSystemObserver.disconnect()停止觀察檔案系統。 - 已達到每個源的觀察最大限制。此限制取決於作業系統,並且無法預先知道。如果發生這種情況,網站可以嘗試重試,但不能保證作業系統會釋放足夠的資源。
- 對目錄或檔案控制代碼的訪問許可權被移除。
- 觀察不再有效。當被觀察的控制代碼(即觀察的
modified-
檔案或目錄已修改。
moved-
檔案或目錄已在根檔案結構內移動。
注意:在 Windows 上,
"moved"觀察不支援在目錄之間進行。它們在源目錄中報告為"disappeared"觀察,在目標目錄中報告為"appeared"觀察。 unknown-
表示某些觀察被遺漏了。如果您想了解有關遺漏觀察中發生了什麼變化的詳細資訊,可以回退到輪詢觀察到的目錄。
根據作業系統,並非所有觀察都會以相同的詳細程度報告,例如,當目錄的內容遞迴更改時。最好的情況是,網站將收到一條詳細的更改記錄,其中包含更改型別和一個指向受影響路徑的控制代碼。最壞的情況是,網站將收到一條更通用的更改記錄(即,型別為 "unknown"),仍然需要它來列舉目錄以確定哪個控制代碼發生了更改。
這仍然比輪詢有所改進,因為目錄列舉可以從回撥函式按需啟動,而不是需要定期輪詢更改。
示例
初始化 FileSystemObserver
在您開始觀察檔案或目錄更改之前,您需要初始化一個 FileSystemObserver 來處理這些觀察。這是使用 FileSystemObserver() 建構函式完成的,該建構函式接受一個回撥函式作為引數。
const observer = new FileSystemObserver(callback);
您可以在 records 陣列中的每個物件是 FileSystemChangeRecord 物件 回撥函式 體中指定以您想要的任何方式返回和處理檔案更改觀察。
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。