Как проверить, существует ли файл перед его созданием

Я хотел бы посмотреть, существует ли файл. Если он не существует, то я хотел бы его создать. Кстати, я использую Linux.

1 ответ

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

Вы должны просто пойти и создать файл. В зависимости от того, что вы пытаетесь сделать, вам может понадобиться один из этих параметров для того, что делать, если файл уже существует:

  • изменить предыдущее содержимое на месте: 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, в зависимости от того, какая у вас библиотека С++.

Кроме того, я должен упомянуть, что если вы хотите атомно заменить содержимое файла (поэтому ни один процесс никогда не видит неполный файл), единственный способ сделать это - записать новое содержимое в новый файл, а затем использовать rename, чтобы переместить его поверх старого файла.

licensed under cc by-sa 3.0 with attribution.