IPropertySetStorage-NTFS 檔案系統實作

NTFS 5.0 版會在檔案本身不是複合檔案時,為 NTFS 磁片區上的檔案提供 IPropertySetStorage 的實作。 NTFS 實作相當於 複合檔案實作。 如需例外狀況的詳細資訊,請參閱。

若要取得 IPropertySetStorage 之 NTFS 實作的指標

  1. 呼叫StgCreateStorageEx,並在grfFlags參數中指定STGFMT_FILE,以建立新的檔案。
  2. 呼叫StgOpenStorageEx,並在grfFlags參數中指定STGFMT_FILESTGFMT_ANY列舉值,以開啟現有的檔案。

不過,您無法為複合檔案取得 IPropertySetStorage 的 NTFS 實作。 使用 StgOpenStorage開啟複合檔案時,指定 STGFMT_FILE 列舉值會導致錯誤。

此外,無法交易簡單的屬性集。 也就是說,除非您同時在grfFlags參數中指定PROPSETFLAG_NONSIMPLE,否則您無法在CreateOpen方法的grfmode參數中指定STGM_TRANSACTED。 屬性集儲存物件本身不支援交易處理。

使用時機

呼叫 IPropertySetStorage 方法,以在目前的 NTFS 屬性集儲存體中建立、開啟或刪除屬性集。 另外還有一種方法 IPropertySetStorage::Enum,提供列舉值指標,可用來列舉儲存體中的屬性集。

相容性

從 Windows 2000 開始,即可使用 IPropertySetStorageIPropertyStorage 的 NTFS 實作。 舊版無法存取這些屬性集。

NTFS 實作會將屬性集儲存在 NTFS 檔案的替代資料流程中。 複製主檔案時,必須複製替代資料流程。

警告

並非所有檔案系統都支援這類資料流程。 如果具有屬性集的 NTFS 檔案複製到 FAT 磁片區,則只會複製檔案中的資料;屬性集遺失。 在此案例中 ,CopyFile 函式不會傳回錯誤。

 

警告

如果執行檔案複製的電腦不是在 Windows 2000 或更新版本上執行的電腦,屬性集可能會遺失。 例如,如果 Windows 95 作業系統上執行的電腦會複製 NTFS 檔案,即使目的地檔案也位於 NTFS 磁片區上,屬性集也會遺失。

 

方法

IPropertySetStorage的 NTFS 檔案系統實作支援下列方法。

IPropertySetStorage::Create

在目前的 NTFS 檔案儲存體中建立新的屬性集,並在傳回時提供 IPropertyStorage NTFS 檔案實作的介面指標。 grfmode參數中指定的共用模式必須STGM_SHARE_EXCLUSIVE

IPropertySetStorage::Open

開啟目前屬性儲存體中的現有屬性集。 傳回時,它會提供 IPropertyStorage之 NTFS 檔案實作的介面指標。 grfmode參數中指定的共用模式必須STGM_SHARE_EXCLUSIVE

IPropertySetStorage::D elete

刪除目前屬性儲存體中的屬性集。

IPropertySetStorage::Enum

建立用來列舉 STATPROPSETSTG 結構的物件。 每個 STATPROPSETSTG 結構都會提供單一屬性集的相關資料。

備註

IPropertySetStorageIPropertyStorage存放區屬性集的 NTFS 實作會在檔案中設定,而不會影響該檔案的內容。 例如,如果您在名為 Default.htm 的 HTML 檔案中建立屬性集,該檔案仍會在網頁瀏覽器中正確顯示。 也就是說,使用這兩個介面來存取檔案時,使用 CreateFile 函式存取檔案時,無法偵測到檔案的變更。

IPropertySetStorage的 NTFS 實作會在用來將屬性集寫入 NTFS 5.0 版磁片區上的檔案時,提供安全的實作。 即使發生系統失敗,實作也無法損毀這類屬性集。 例如,如果在呼叫 IPropertyStorage::Commit 期間,系統電源失敗,而屬性集排清到磁片時,該屬性集永遠不會處於中繼狀態。 舊版的屬性集會保留,或儲存所有更新。

IPropertySetStorage的 NTFS 實作與複合檔案實作有下列不同之處:

  • IEnumSTATPROPSETSTG介面取得的STATPROPSETSTG結構包含clsid成員,其值一律為零 (CLSID_Null) 。 使用複合檔案實作時,會針對非簡單 (傳回正確的 clsid 成員,請參閱 屬性集的儲存體和資料流程物件) 屬性集。

  • 使用StgCreateStorageExStgOpenStorageEx函式取得IPropertySetStorage介面指標的 NTFS 實作時,grfmode參數必須遵循與複合檔案實作相同的規則。

    此外,可能無法使用下列旗標:

    STGM_SIMPLESTGM_TRANSACTEDSTGM_CONVERTSTGM_PRIORITYSTGM_DELETEONRELEASE

  • StgCreateStorageExStgOpenStorageEx函式取得 NTFS IPropertySetStorage介面時,共用模式主要適用于該介面的其他實例,而不是開啟檔案本身的實例。 例如,如果呼叫StgOpenStorageEx函式來開啟 NTFS IPropertySetStorage介面,且grfmode參數設定為STGM_READWRITE|STGM_SHARE_EXCLUSIVE,就可以使用CreateFile函式開啟檔案。

    開啟此介面的這類同時實例受限於下列條件約束:CreateFile函式中的dwShareMode參數必須指定FILE_SHARE_READ旗標,而 dwAccess參數不得指定DELETE旗標。 此外,在開啟這些屬性集介面的檔案上,不得呼叫 DeleteFileMoveFile 函式,因為這些函式需要對檔案進行 DELETE 存取。

  • 如果以唯讀方式開啟 NTFS IPropertySetStorage 方法,而且檔案目前沒有屬性集,則傳回的物件實際上不會保留開啟檔案。 因此,即使原始開啟作業的共用模式拒絕它,該檔案的其他開啟也會成功。

    例子;如果在模式中開啟 NTFS IPropertySetStorageSTGM_READ|STGM_SHARE_EXCLUSIVE,而且檔案沒有屬性集,就可以同時開啟檔案 STGM_READWRITE|STGM_SHARE_EXCLUSIVE

IPropertyStorage-NTFS 檔案系統實作

IPropertySetStorage

IPropertyStorage

IStorage::EnumElements

PROPSETFLAG 常數

STATPROPSETSTG