Что означает код HRESULT 0x80030103 (STG_E_CANTSAVE)?

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

STG_E_CANTSAVE

Не считайте это косметическим сбоем

STG_E_CANTSAVE означает, что операцию сохранения не удалось завершить. Этот код намеренно менее конкретен, чем STG_E_MEDIUMFULL, STG_E_WRITEFAULT или STG_E_ACCESSDENIED; следующий полезный шаг — сохранить более подробный контекст операции, которая к нему привела. В процессе работы с составным файлом ошибка может появиться при окончательной фиксации после изменения нескольких потоков или вложенных хранилищ.

Ключевое эксплуатационное правило: изменения в памяти не доказывают надёжную запись. Корневое IStorage следует явно фиксировать и проверять HRESULT. Освобождение объекта может сбросить буферы, но не может надёжно вернуть вызывающей стороне результат ошибки.

Как сделать ошибки сохранения диагностируемыми

  • Запишите полную цепочку HRESULT, путь, режим хранилища, временный каталог и доступное место в момент сбоя.
  • Сохраните работу пользователя в новом месте или надёжном файле восстановления до ремонта или перезаписи.
  • Проверьте разрешения назначения, доступность общего ресурса, ёмкость и одновременный доступ до изменения логики приложения.
  • Проектируйте сохранение как восстанавливаемую операцию: сохраняйте предыдущую исправную версию до успешной фиксации и проверяйте итоговый документ, если формат критичен для бизнеса.

Ссылки


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