Я работаю в Windows XP, использую Visual Studio 6 (да, я знаю, что он старый), создаю / поддерживаю C ++ DLL.Я столкнулся с проблемой, что fopen не удалось открыть существующий файл, он всегда возвращает NULL.
Я пробовал:
- Проверка errno и _doserrno путем установки обоих на ноль и последующей проверки их снова, оба остаются нулевыми, и, таким образом, GetLastError () не сообщает об ошибках.Я знаю, что fopen не требуется устанавливать errno, когда он сталкивается с ошибкой в соответствии со стандартом C.
- Жесткое кодирование пути к файлу, который не является относительным.
- Попробовал на другой машине разработчиков, тот же результат.
Действительно странная вещь - это CreateFile работает, и файл может быть прочитан с ReadFile.Мы считаем, что это работает в сборке релиза, однако мы также наблюдаем очень странное поведение в других областях приложения, и мы не уверены, связано ли это с этим.
Код приведен ниже, я неувидеть что-нибудь странное, это выглядит вполне стандартным для меня.Исходный файл не менялся в течение полугода.
HRESULT CDataHandler::LoadFile( CStdString szFilePath )
{
//Code
FILE* pFile;
if ( NULL == ( pFile = fopen( szFilePath.c_str(), "rb") ) )
{
return S_FALSE;
}
//More code
}