容器: 複合檔案

本文章說明的元件和實作複合檔案和優點與缺點使用 OLE 應用程式中的複合檔案。

複合檔案是 OLE 中不可或缺的一部分。它們用來加速資料傳輸和 OLE 文件儲存。複合檔案是使用中的結構化儲存體模型的實作。一致的介面存在於儲存體、 資料流,或檔案物件的支援序列化。複合檔案支援 Mfc 程式庫中類別的COleStreamFileCOleDocument

注意事項注意事項

使用複合檔案並不表示的資訊是從 OLE 文件或複合的文件。複合檔案是只是其中一種方式來儲存複合文件、 OLE 文件,以及其他資料。

複合檔案的元件

OLE 的實作複合檔案會使用三種物件類型: 資料流物件、 儲存物件,以及ILockBytes物件。這些物件包含下列的方式類似於標準檔案系統的元件:

  • 資料流物件,例如檔案,儲存任何型別的資料。

  • 儲存物件,像是目錄,可包含其他儲存體和資料流物件。

  • LockBytes 物件代表儲存物件與實體硬體之間的介面。它們決定如何寫入儲存裝置的實際位元組數 LockBytes 正在存取的物件,例如硬碟或全域記憶體區域。如需有關 LockBytes 物件,並ILockBytes介面,請參閱 OLE 程式設計人員參考

複合檔案的優缺點

複合檔案提供檔案存放區的舊方法所沒有的優點。包括:

  • 累加式的檔案存取。

  • 檔案存取模式。

  • 檔案結構的標準化。

複合檔案的潛在缺點 — 大型軟碟片儲存至的大小和效能問題 — 應該被視為的當決定是否將在您的應用程式中使用它們。

ydd3k45e.collapse_all(zh-tw,VS.110).gif累加式檔案的存取權

檔案的累加存取是附帶使用複合檔案的好處。因為複合檔案可被視為"檔案內的檔案系統 」,就可以存取個別物件的型別,例如資料流或儲存,而無需載入整個檔案。這可能會大幅降低應用程式需要存取使用者所編輯的新物件的時間。累加式更新時,會根據相同的概念,有類似的益處。儲存整個檔案,只是為了儲存一個物件所做的變更,而非 OLE 儲存只有使用者編輯資料流或儲存文件。

ydd3k45e.collapse_all(zh-tw,VS.110).gif檔案存取模式

可以決定何時複合檔案中的物件變更就會交付到磁碟是使用複合檔案的另一個好處。在其中存取檔案,異動或直接,模式會決定何時交付變更。

  • 交易的模式會使用兩階段交易認可作業,才能變更物件在複合檔案中,這樣可將 [舊] 與 [可用文件的新複本,直到使用者選擇儲存或復原所做的變更。

  • 同時具備,稍後復原這些使其無法直接模式會併入文件的變更。

如需有關存取模式的詳細資訊,請參閱 OLE 程式設計人員參考

ydd3k45e.collapse_all(zh-tw,VS.110).gif標準化

複合檔案的標準化的結構允許不同的 OLE 應用程式,以瀏覽由 OLE 應用程式不需要知道實際建立檔案的應用程式所建立的複合檔案。

ydd3k45e.collapse_all(zh-tw,VS.110).gif大小和效能考量

使用下列格式的檔案越能夠比其他的檔案較大的複合檔案的儲存結構和累加儲存資料的能力的複雜性,因為未結構化或 「 一般檔案 」 的儲存體。如果您的應用程式經常載入和儲存檔案,使用複合檔案會導致檔案大小的增加比使用的檔案更快速。複合檔案會變大,因為檔案的存取時間上儲存和載入從軟式磁碟片也都會影響,導致檔案的速度較慢的存取。

另一個會影響效能的問題是複合檔案分散程度。複合檔案的大小取決於檔案所使用的第一個和最後一個磁碟磁扇區之間的差異。分散的檔案可以包含很多的可用空間的區域不包含資料,但當計算大小也會被計算。在複合檔案的存留期內,這些區域會藉由插入或刪除儲存物件的建立。

為您的資料使用複合檔案格式

成功地建立應用程式具有文件類別衍生自之後COleDocument,確定您的主文件的建構函式呼叫EnableCompoundFile。當應用程式精靈建立 OLE 容器應用程式時,您就會插入這個呼叫。

OLE 程式設計人員參考,請參閱 IStreamIStorage,以及 ILockBytes

請參閱

參考

COleStreamFile 類別

COleDocument 類別

概念

容器

容器: 使用者介面問題