Python имеет много вариантов от основных трех режимов, эти три режима:
'w' write text
'r' read text
'a' append text
Итак, чтобы добавить в файл, это так же просто, как:
f = open('filename.txt', 'a')
f.write('whatever you want to write here (in append mode) here.')
Тогда есть режимы, которые просто делают ваш код меньше строк:
'r+' read + write text
'w+' read + write text
'a+' append + read text
Наконец, существуют режимы чтения / записи в двоичном формате:
'rb' read binary
'wb' write binary
'ab' append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
Вы не можете сделать это со стандартным fstream, вам придется использовать определенные для платформы функции.
В Windows вы можете использовать CreateFile () или LockFileEx () . В Linux существует flock () , lockf () и fcntl () (как сказал предыдущий комментатор).
Если вы используете MSVC, вы можете передать третий параметр в конструктор fstream. См. Документацию для версий Visual Studio 6 или более поздних версий . Конечно, он не будет работать с другими компиляторами и платформами.
Почему вы все равно хотите заблокировать других? Возможно, будет лучшее решение ...
Расширение комментария к Casebash:
Чтобы открыть файл в окнах, чтобы другие процессы не могли его записать, используйте
file.rdbuf()->open(path, std::ios_base::app, _SH_DENYWR);
_SH_DENYRW будут лишены доступа для чтения и записи
Используя модуль Boos Interprocess , существует функция блокировки файла .
Заблокируйте файл, откройте его, прочитайте и / или напишите из / к нему, закройте его, откройте его.
Невозможно сделать это на родном C ++, так как это будет сильно зависит от платформы. В Linux / UNIX вы можете сделать это с помощью flock
или fcntl
. Я не уверен, как это сделать в Windows.
В окнах кажется, что вам нужно передать некоторые флаги в CreatFile
или использовать LockFileEx
(который позволяет блокировать диапазон байтов).
Обратите внимание, что все эти методы работают с дескрипторами / дескрипторами базового OS-файла, а не с fstream
s. Вам потребуется либо использовать Posix, либо Windows API для чтения / записи из файла или обернуть дескриптор / дескриптор файла в fstream
. Это снова зависит от платформы. Я уверен, что есть способ сделать это, но я не помню этого с головы.
fstream
– Casebash 14 December 2010 в 04:29