| Предыдущий | Следующий |
| STG_E_INUSE | STG_E_REVERTED |
STG_E_NOTCURRENT
Предупреждение об устаревшем записывающем объекте
STG_E_NOTCURRENT означает, что другой открытый экземпляр хранилища зафиксировал изменения после создания представления вызывающей стороны. HRESULT полезен тем, что не позволяет устаревшему писателю незаметно перезаписать более новую зафиксированную версию. Поэтому это сигнал конфликта версий, а не повод принудительно записывать.
Microsoft документирует условие для IStorage::Commit и рекомендует STGC_ONLYIFCURRENT когда несколько одновременных писателей не запрещены. Это превращает скрытый риск потери обновления в обнаруживаемую ошибку, которую приложение может разрешить осознанно.
Правильная схема восстановления
- Остановите текущую фиксацию и отдельно сохраните ожидающие изменения вызывающей стороны.
- Повторно откройте или загрузите последнюю зафиксированную версию хранилища до решения о безопасном воспроизведении изменений.
- Сравнивайте смысловые данные, а не только временные метки; два писателя могли по-разному изменить один поток.
- Используйте модель одного писателя, блокировку или аренду либо явную политику слияния для документов, поддерживающих параллельное редактирование.
Ссылки
- Microsoft: IStorage::Commit и STGC_ONLYIFCURRENT
- Microsoft: значения HRESULT Structured Storage
- Apache POI: составные файлы POIFS
Нужно найти другой код? Найти другой код состояния или ошибки.
