stGC 枚举 (wtypes.h)

STGC 枚举常量指定在 IStorage::Commit 和 IStream::Commit 方法中执行提交操作的条件。

语法

typedef enum tagSTGC {
  STGC_DEFAULT = 0,
  STGC_OVERWRITE = 1,
  STGC_ONLYIFCURRENT = 2,
  STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
  STGC_CONSOLIDATE = 8
} STGC;

常量

 
STGC_DEFAULT
值: 0
可以使用 STGC_CONSOLIDATE或此元素列表中的其他三个标志的某种组合来指定此条件。 使用此值可提高代码的可读性。
STGC_OVERWRITE
值:1
提交操作可以覆盖现有数据,以减少总体空间需求。 对于典型用法,不建议使用此值,因为它不如默认值可靠。 在这种情况下,在覆盖旧数据之后,但在完全提交新数据之前,提交操作可能会失败。 然后,旧版本和新版本的存储对象都不会保持不变。





可以在以下情况下使用此值:


  • 用户愿意冒丢失数据的风险。

  • 内存不足的保存序列将用于安全地将存储对象保存到较小的文件中。

  • 以前的提交 STG_E_MEDIUMFULL返回,但覆盖现有数据将提供足够的空间来提交对存储对象的更改。


请注意,提交操作会在发生任何覆盖之前验证是否存在足够的空间。 因此,即使指定了此值,如果提交操作因空间需求而失败,旧数据也是安全的。 但是,如果提交操作因磁盘空间不足以外的任何原因而失败,则指定的 STGC_OVERWRITE 值可能会导致数据丢失。
STGC_ONLYIFCURRENT
值: 2
防止存储对象的多个用户覆盖彼此的更改。 仅当用户最近打开的存储对象而对保存的存储对象没有更改时,才会发生提交操作。 因此,存储对象的保存版本与用户编辑的版本相同。 如果其他用户更改了存储对象,则提交操作将失败并返回STG_E_NOTCURRENT值。 若要替代此行为,请使用 STGC_DEFAULT 值再次调用 IStorage::Commit 或 IStream::Commit 方法。
STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE
值: 4
将更改提交到写后磁盘缓存,但不将缓存保存到磁盘。 在写隐藏磁盘缓存中,写入磁盘的操作实际上会写入磁盘缓存,从而提高性能。 缓存最终写入磁盘,但通常直到写入操作已返回。 性能提升以在保存缓存之前出现问题且缓存中的数据丢失之前丢失数据的风险增加为代价。




如果未指定此值,则即使使用了磁盘缓存,也会将更改提交到根级存储对象。 两阶段提交过程可确保数据存储在磁盘上,而不仅仅是存储在磁盘缓存中。
STGC_CONSOLIDATE
值: 8
Windows 2000 和 Windows XP:指示应在提交存储后对其进行合并,从而导致磁盘上的文件较小。 此标志仅在已以事务处理模式打开的最外层存储对象上有效。 它对于流无效。 STGC_CONSOLIDATE标志可以与任何其他 STGC 标志组合使用。

注解

可以为正常提交操作指定 STGC_DEFAULTSTGC_OVERWRITESTGC_ONLYIFCURRENTSTGC_DANGEROUSLYCOMMITMERELYTODISKCACHE 的某种组合。 可以使用任何其他 STGC 标志指定 STGC_CONSOLIDATE

通常,在多个用户可以同时编辑该对象的情况下,使用 STGC_ONLYIFCURRENT 来保护存储对象。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 wtypes.h

另请参阅

IPropertyStorage

IStorage

IStream