虛擬化根目錄中的快取狀態
提供者會使用虛擬化根目錄下的本機文件系統作為其所管理專案的快取。 項目(檔案或目錄)可以在本機檔案系統的六個狀態之一:
虛擬
專案不存在於本機磁碟上。 它會在父目錄的列舉期間進行投影,也就是合成。 虛擬專案會與磁碟上可能存在的任何項目合併,以呈現父目錄的完整內容。
佔位 元
對於檔案:檔案的內容(主要數據流)不存在於磁碟上。 檔案的元數據(名稱、大小、時間戳、屬性等)會在磁碟上快取。
對於目錄:磁碟上沒有一些或所有目錄的直屬子系(目錄中的檔案和目錄),亦即它們仍然是虛擬的。 目錄的元數據(名稱、時間戳、屬性等)會在磁碟上快取。
Hydrated 佔位符
針對檔案:檔案的內容和元數據已快取至磁碟。 也稱為「部分檔案」。
針對目錄:在磁碟上建立為佔位元的目錄永遠不會變成凍結的佔位元目錄。 這可讓提供者從其備份存放區中的目錄新增或移除專案,並讓這些變更反映在本機快取中。
骯髒的佔位元 (凍結或不凍結)
專案的元數據已在本機修改,而且不再是提供者存放區中狀態的快取。 請注意,在佔位元元目錄下建立或刪除檔案或目錄會導致佔位符目錄變得骯髒。
完整檔案/目錄
檔案:檔案的內容(主要數據流)已修改。 檔案不再是提供者存放區中狀態的快取。 在本機文件系統上建立的檔案(也就是完全不存在於提供者存放區中)也被視為完整檔案。
針對目錄:已在本機文件系統上建立的目錄(也就是完全不存在於提供者存放區中)會被視為完整目錄。 在磁碟上建立為佔位元的目錄永遠不會變成完整目錄。
墓碑
特殊的隱藏佔位元,表示已從本機檔系統中刪除的專案。 列舉目錄時,ProjFS 會將一組本機專案(佔位元、完整檔案等)與一組虛擬投影項目合併。 如果專案同時出現在本機和投影集中,則本機專案會優先使用。 如果本機文件系統中沒有檔案,則沒有本機狀態,因此會出現在 列舉中。 不過,如果已刪除該專案,在列舉中顯示該專案將會是非預期的。 以墓碑取代已刪除的項目會產生下列效果:
- 不顯示專案的列舉。
- 檔案開啟,預期專案存在失敗,例如「找不到檔案」。
- 檔案建立只有在專案不存在成功時才會成功;ProjFS 會將墓碑移除為作業的一部分。
為了說明上述狀態,請考慮下列順序,因為 ProjFS 提供者具有位於虛擬化根 C 中的單一檔案 「foo.txt」:\root。
- 應用程式會列舉 C:\root。 它會看到虛擬檔案 「foo.txt」。 由於檔案尚未存取,因此檔案不存在於磁碟上。
- 應用程式會開啟句柄以 C:\root\foo.txt。 ProjFS 會告知提供者為其建立佔位符。
- 應用程式會讀取檔案的內容。 提供者會將檔案內容提供給 ProjFS,並快取至 C:\root\foo.txt。 檔案現在是凍結的佔位元。
- 應用程式會更新上次修改的時間戳。 檔案現在是已解除凍結的佔位符。
- 應用程式會開啟句柄以存取檔案。 C:\root\foo.txt 現在是完整檔案。
- 應用程式會刪除 C:\root\foo.txt。 ProjFS 會將檔案取代為墓碑。 現在當應用程式列舉 C:\root it does not see foo.txt時。 如果嘗試開啟檔案,則開啟會失敗並出現ERROR_FILE_NOT_FOUND。