Блокировка файлов в Windows - PullRequest
       15

Блокировка файлов в Windows

1 голос
/ 11 августа 2009

Я работаю над устаревшим кодом, который открывает файл и добавляет в него двоичные данные:

    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);

По какой-то причине код открывает файл дважды. Это потому, что _sopen используется для блокировки файла в Windows?

Если это так, почему std :: ifstream :: open не блокирует файл?

Есть ли способ проверить, был ли дескриптор файла Windows уже закрыт?

1 Ответ

2 голосов
/ 11 августа 2009

Он открывается дважды, потому что первый открывает его и блокирует. Затем fstream открывает его снова (что несколько противоречит смыслу предыдущего утверждения.)

О том, как просто заблокировать файл, проверить этот вопрос .

...