Как проверить, существует ли файл перед его созданием - PullRequest
5 голосов
/ 23 октября 2011

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

1 Ответ

17 голосов
/ 23 октября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...