共用方式為


虛擬化根目錄中的快取狀態

提供者會使用虛擬化根目錄下的本機檔案系統,作為其所管理專案的快取。 專案 (檔案或目錄) 可以是本機檔案系統上六種狀態的其中一種:

  • 網路

    專案不存在於本機磁片上。 在列舉其父目錄期間,會投影它,也就是合成的。 虛擬專案會與磁片上可能存在的任何專案合併,以呈現父目錄的完整內容。

  • 預留位置

    對於檔案:檔案的內容 (主要資料流程) 不存在於磁片上。 檔案的中繼資料 (名稱、大小、時間戳記、屬性等) 快取在磁片上。

    針對目錄:部分或所有目錄的立即子系 (目錄中的檔案和目錄) 不存在於磁片上,亦即它們仍然是虛擬的。 目錄的中繼資料 (名稱、時間戳記、屬性等) 會在磁片上快取。

  • Hydrated 預留位置

    針對檔案:檔案的內容和中繼資料已快取至磁片。 也稱為「部分檔案」。

    針對目錄:在磁片上建立為預留位置的目錄永遠不會變成已凍結的預留位置目錄。 這可讓提供者在其備份存放區中新增或移除目錄中的專案,並讓這些變更反映在本機快取中。

  • 已 (凍結或不) 的中途預留位置

    專案的中繼資料已在本機修改,而且不再是提供者存放區中狀態的快取。 請注意,在預留位置目錄下建立或刪除檔案或目錄會導致預留位置目錄變成已變更。

  • 完整檔案/目錄

    針對檔案:已修改檔案的內容 (主要資料流程) 。 檔案不再是提供者存放區中狀態的快取。 在本機檔案系統上建立的檔案 (亦即,提供者存放區中完全不存在) 檔案也會被視為完整檔案。

    針對目錄:已在本機檔案系統上建立的目錄 (亦即提供者存放區中不存在的目錄,) 都會被視為完整目錄。 在磁片上建立為預留位置的目錄永遠不會變成完整目錄。

  • 墓碑

    特殊的隱藏預留位置,表示已從本機檔案系統中刪除的專案。 當列舉目錄時,ProjFS 會將本機專案集與一組虛擬投影專案合併 (預留位置、完整檔案等。) 。 如果專案同時出現在本機和投影集中,本機專案會優先使用。 如果檔案不存在於本機檔案系統中,則沒有本機狀態,因此會出現在 列舉中。 不過,如果該專案已被刪除,在列舉中出現該專案將會是非預期的。 以標記取代已刪除的專案會產生下列效果:

    • 不顯示專案的列舉。
    • 檔案開啟,預期專案存在失敗,例如「找不到檔案」。
    • 只有在專案不存在成功時,才會建立預期成功的檔案;ProjFS 會將標記移除為作業的一部分。

為了說明上述狀態,請考慮下列順序,假設 ProjFS 提供者具有位於虛擬化根 C:\root 中的單一檔案 「foo.txt」。

  1. 應用程式會列舉 C:\root。 它會看到虛擬檔案 「foo.txt」。 由於檔案尚未存取,因此檔案不存在於磁片上。
  2. 應用程式會開啟C:\root\foo.txt控制碼。 ProjFS 會告知提供者為其建立預留位置。
  3. 應用程式會讀取檔案的內容。 提供者會將檔案內容提供給 ProjFS,並快取至C:\root\foo.txt。 檔案現在是已凍結的預留位置。
  4. 應用程式會更新上次修改的時間戳記。 檔案現在是已解除凍結的預留位置。
  5. 應用程式會開啟控制碼,以存取檔案。 C:\root\foo.txt現在是完整檔案。
  6. 應用程式會刪除C:\root\foo.txt。 ProjFS 會將檔案取代為標記。 現在,當應用程式列舉 C:\root 時,它看不到foo.txt。 如果嘗試開啟檔案,則開啟會失敗並出現ERROR_FILE_NOT_FOUND。