| Предыдущий | Следующий |
| STG_E_INVALIDFLAG | STG_E_NOTCURRENT |
STG_E_INUSE
Занятость — это проблема состояния
STG_E_INUSE означает, что объект хранилища в данный момент занят. В отличие от STG_E_SHAREVIOLATION, ошибка не обязательно указывает на конфликтующий режим открытия файла, а в отличие от STG_E_LOCKVIOLATION не обязательно раскрывает конкретного владельца блокировки. Это сигнал о том, что запрошенная операция несовместима с текущим состоянием объекта или уже выполняющейся операцией.
В рабочем процессе Structured Storage состояние может удерживаться копированием потока, последовательностью фиксации, преобразователем, асинхронным компонентом или операцией уровня приложения, которая ещё не завершилась. Рассматривайте HRESULT как указание разобраться с жизненным циклом, а не как доказательство повреждения физического документа.
Полезные шаги исследования
- Регистрируйте точный вызов API и сведения о том, была ли уже активна операция чтения, копирования, фиксации или изменения того же корневого хранилища.
- Сериализуйте изменяющие операции для каждого документа и задайте чёткое правило завершения или отмены рабочих задач.
- Освобождайте ссылки только после подтверждения остановки ожидающей работы; преждевременное уничтожение может вызвать ошибку другого типа.
- Если повтор допустим, используйте ограниченное число попыток с повторной проверкой состояния вместо плотного цикла.
Ссылки
- Microsoft: коды ошибок COM Structured Storage
- Microsoft: жизненный цикл IStorage::Commit
- OpenMcdf: реализация составных файлов
Нужно найти другой код? Найти другой код состояния или ошибки.