Pergunta

Estou trabalhando em algum código legado que abre um arquivo e adiciona dados binários ao arquivo:

    std::ifstream mInFile;

    #ifdef WINDOWS
        miWindowsFileHandle = _sopen(filename.c_str(), O_RDONLY , SH_DENYWR, S_IREAD);
    #endif

    mInFile.open(filename.c_str(), std::ios_base::binary);

Por algum motivo, o código abre o arquivo duas vezes. Isso é porque o _SOPEN é usado para bloquear o arquivo no Windows?

Se sim, como é que o std :: ifstream :: open não bloqueia o arquivo?

Existe uma maneira de verificar se um identificador de arquivo do Windows já foi fechado?

Foi útil?

Solução

Ele abre duas vezes porque o primeiro o abre e o trava. Então o FStream abre novamente (um tanto contraditório com a intenção da declaração anterior.)

Sobre como apenas bloquear o arquivo, Confira esta pergunta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top