### Question 19.11

How can I check whether a file exists? I want to warn the user if a requested input file is missing.

It's surprisingly difficult to make this determination reliably and portably. Any test you make can be invalidated if the file is created or deleted (i.e. by some other process) between the time you make the test and the time you try to open the file.

Three possible test routines are `stat`, `access`, and `fopen`. (To make an approximate test for file existence with `fopen`, just open for reading and close immediately.) Of these, only `fopen` is widely portable, and `access`, where it exists, must be used carefully if the program uses the Unix set-UID feature.

Rather than trying to predict in advance whether an operation such as opening a file will succeed, it's often better to try it, check the return value, and complain if it fails. (Obviously, this approach won't work if you're trying to avoid overwriting an existing file, unless you've got something like the `O_EXCL` file opening option available, which does just what you want in this case.)

References: PCS Sec. 12 pp. 189,213
POSIX Sec. 5.3.1, Sec. 5.6.2, Sec. 5.6.3

Read sequentially: prev next up top

This page by Steve Summit // Copyright 1995 // mail feedback