Что означает код HRESULT 0x80030101 (STG_E_NOTCURRENT)?

 
Предыдущий Следующий
STG_E_INUSE STG_E_REVERTED

STG_E_NOTCURRENT

Предупреждение об устаревшем записывающем объекте

STG_E_NOTCURRENT означает, что другой открытый экземпляр хранилища зафиксировал изменения после создания представления вызывающей стороны. HRESULT полезен тем, что не позволяет устаревшему писателю незаметно перезаписать более новую зафиксированную версию. Поэтому это сигнал конфликта версий, а не повод принудительно записывать.

Microsoft документирует условие для IStorage::Commit и рекомендует STGC_ONLYIFCURRENT когда несколько одновременных писателей не запрещены. Это превращает скрытый риск потери обновления в обнаруживаемую ошибку, которую приложение может разрешить осознанно.

Правильная схема восстановления

  • Остановите текущую фиксацию и отдельно сохраните ожидающие изменения вызывающей стороны.
  • Повторно откройте или загрузите последнюю зафиксированную версию хранилища до решения о безопасном воспроизведении изменений.
  • Сравнивайте смысловые данные, а не только временные метки; два писателя могли по-разному изменить один поток.
  • Используйте модель одного писателя, блокировку или аренду либо явную политику слияния для документов, поддерживающих параллельное редактирование.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.