Поделиться через


Перечисление 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. Чтобы переопределить это поведение, снова вызовите метод IStorage::Commit или IStream::Commit , используя значение STGC_DEFAULT .
STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE
Значение: 4
Фиксирует изменения в кэше диска с фоновой записью, но не сохраняет кэш на диске. В кэше диска с фоновой записью операция записи на диск фактически выполняет запись в кэш диска, тем самым повышая производительность. Кэш в конечном итоге записывается на диск, но обычно не до тех пор, пока операция записи не будет возвращена. Повышение производительности происходит за счет повышенного риска потери данных, если проблема возникает до сохранения кэша и потери данных в кэше.




Если это значение не указано, фиксация изменений в объектах хранилища корневого уровня будет надежной, даже если используется кэш диска. Двухэтапная фиксация гарантирует, что данные будут храниться на диске, а не только в кэше диска.
STGC_CONSOLIDATE
Значение: 8
Windows 2000 и Windows XP: указывает, что хранилище должно быть консолидировано после фиксации, что приводит к уменьшению размера файла на диске. Этот флаг действителен только для самого внешнего объекта хранилища, открытого в режиме транзакций. Он недействителен для потоков. Флаг STGC_CONSOLIDATE можно объединить с любыми другими флагами STGC.

Комментарии

Для обычных операций фиксации можно указать STGC_DEFAULT или некоторое сочетание STGC_OVERWRITE, STGC_ONLYIFCURRENT и STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE . Вы можете указать STGC_CONSOLIDATE с любыми другими флагами STGC.

Как правило, используйте STGC_ONLYIFCURRENT для защиты объекта хранилища в случаях, когда несколько пользователей могут одновременно редактировать объект.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть wtypes.h

См. также раздел

IPropertyStorage

IStorage

IStream