Недавно я столкнулся с очень похожей проблемой при других обстоятельствах. При попытке получить доступ к файлу через CGI, _stati64()
вернет -1 с ошибкой ENOENT "Нет такого файла или каталога". Я написал простую программу на C для запуска _stati64()
в файле, чтобы увидеть, были ли результаты одинаковыми, и она работала правильно.
Дальнейшее изучение с помощью Procmon показало, что процесс, вызываемый через CGI, потерпит неудачу при операции CreateFile
в родительском каталоге рассматриваемого файла; результатом всегда был ACCESS DENIED, что является тем же результатом, что и попытка доступа к файлу, который на самом деле не существует.
Исправление оказалось следующим:
- создание копии исходного родительского каталога и всего содержимого
- удаление оригинала
- переименование копии в оригинальное имя
Да, я понятия не имею, что вызвало это, но отладка была очень неприятной проблемой. Я предполагаю, что доступ к CGI не удался из-за неправильных разрешений в исходном каталоге.