| Предыдущий | Следующий |
| STG_E_LOCKVIOLATION | STG_E_INVALIDPARAMETER |
STG_E_FILEALREADYEXISTS
Почему существующий объект имеет значение
STG_E_FILEALREADYEXISTS часто возвращается, когда приложение пытается создать хранилище или поток с уже существующим именем, а запрошенный режим содержит STGM_FAILIFTHERE. В составном файле речь может идти о внутреннем элементе хранилища, а не об отдельном файле, видимом в Проводнике. Поэтому внешний документ может существовать и быть исправным, хотя создание одного именованного дочернего объекта намеренно отклонено.
Правильное исправление зависит от требуемой семантики. Программа записи конфигурации может быть обязана завершиться ошибкой, поскольку замена существующего потока уничтожит данные. Построителю кэша, напротив, может потребоваться явный путь обновления или замены. Считать любой существующий элемент одноразовым опасно для составных документов с несколькими независимыми потоками.
Проектирование и диагностика
- Запишите точное имя элемента и флаги
STGM_*, использованные при создании. - Явно определите, должна ли операция только создавать объект, открывать и обновлять его, заменять либо создавать новую версию.
- Для пользовательских документов изучите дерево хранилища до перезаписи: поток с похожим именем может принадлежать другой функции или другому производителю.
- Используйте транзакции и фиксацию, чтобы неудачное обновление не оставило контейнер частично заменённым.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.