Por que o Fopen falhou ao abrir um arquivo que existe?
Estou no Windows XP usando o Visual Studio 6 (sim, eu sei que é antigo) construindo / mantendo uma DLL C ++. Eu encontrei um problema com o fopen ao abrir um arquivo existente, ele sempre retorna NULL.
Eu tentei:
Verificando errno e _doserrno, definindo ambos como zero e depois verificando-os novamente, ambos permanecem zero e, portanto, GetLastError () não relata erros. Eu sei que o fopen não precisa definir errno quando encontrar um erro de acordo com um padrão C.Codifique o caminho do arquivo, que não é relativo.Tentei em outra máquina de desenvolvedores que o mesmo resultado.O mais estranho é que o CreateFile funciona e o arquivo pode ser lido com o ReadFile. Acreditamos que isso funciona em uma compilação de versão, no entanto, também estamos vendo um comportamento muito estranho em outras áreas do aplicativo e não temos certeza se isso está relacionado.
O código está abaixo, não vejo nada de estranho, parece bastante padrão para mim. O arquivo de origem não mudou por pouco menos de meio ano.
HRESULT CDataHandler::LoadFile( CStdString szFilePath )
{
//Code
FILE* pFile;
if ( NULL == ( pFile = fopen( szFilePath.c_str(), "rb") ) )
{
return S_FALSE;
}
//More code
}