Использование std: fstream, как запретить доступ (чтение и запись) в файл

Как я могу запретить доступ к файлу, который я открываю с помощью fstream? Я хочу получить доступ к файлу, пока я читаю/пишу его с помощью fstream?

Ответ 1

Вы не можете сделать это со стандартным fstream, вам придется использовать определенные для платформы функции.

В Windows вы можете использовать CreateFile() или LockFileEx(). В Linux существует flock(), lockf(), и fcntl() (как сказал предыдущий комментатор).

Если вы используете MSVC, вы можете передать третий параметр в конструктор fstream. См. Документацию для Visual Studio 6 или более новые версии. Конечно, он не будет работать с другими компиляторами и платформами.

Почему вы все равно хотите заблокировать других? Возможно, будет лучшее решение...

Ответ 2

Расширение комментария к Casebash:

Чтобы открыть файл в окнах, чтобы другие процессы не могли его записать, используйте

file.rdbuf()->open(path, std::ios_base::app, _SH_DENYWR);

_SH_DENYRW запретит доступ как для чтения, так и для записи

Ответ 3

В native С++ нет возможности сделать это, поскольку он будет сильно зависимым от платформы. В Linux/UNIX вы можете сделать это с помощью flock или fcntl. Я не уверен, как это сделать в Windows.

В окнах похоже, что вам нужно передать некоторые флаги в CreatFile или использовать LockFileEx (который позволяет блокировать диапазон байтов).

Обратите внимание, что все эти методы работают с базовыми дескрипторами/дескрипторами файла ОС, а не с fstream s. Вам потребуется либо использовать Posix, либо Windows API для чтения/записи из файла или обернуть дескриптор/дескриптор файла в fstream. Это снова зависит от платформы. Я уверен, что есть способ сделать это, но я не помню этого с головы.