Вы не можете сделать это надежно.Между тем, когда вы проверяете, существует ли файл, и когда вы его создаете, другой процесс может его создать.
Вам нужно просто пойти дальше и создать файл.В зависимости от того, что вы пытаетесь сделать больше, вам может потребоваться один из следующих вариантов действий, если файл уже существует:
- изменить предыдущее содержимое на месте:
open("file", O_RDWR|O_CREAT, 0666)
- стереть предыдущее содержимое:
open("file", O_WRONLY|O_CREAT|O_TRUNC, 0666
) - добавить к предыдущему содержимому:
open("file", O_WRONLY|O_CREAT|O_APPEND, 0666)
- завершить операцию:
open("file", O_WRONLY|O_CREAT|O_EXCL, 0666)
Большинство из них, но, к сожалению, не все, имеют эквиваленты на интерфейсе более высокого уровня iostream
.Также может быть способ обернуть iostream вокруг файлового дескриптора, который вы получаете из open
, в зависимости от того, какая у вас библиотека C ++.
Также я должен упомянуть, что если вы хотите атомно заменить содержимое файла (поэтому ни один процесс не видит неполный файл), единственный способ сделать это - записать новое содержимое в новый файл, а затем использовать rename
для его перемещенияповерх старого файла.