Как я могу запретить доступ к файлу, который я открываю с помощью fstream? Я хочу получить доступ к файлу, пока я читаю/пишу его с помощью fstream?
Использование std: 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
. Это снова зависит от платформы. Я уверен, что есть способ сделать это, но я не помню этого с головы.
Ответ 4
Используя модуль Boos Interprocess, блокировка файла.
Заблокируйте файл, откройте его, прочитайте и/или напишите с/на него, закройте его, разблокируйте.