These functions test for permission to access a file in specific ways. Unless explicitly stated otherwise, they recursively follow symbolic links for their file name arguments, at all levels (at the level of the file itself and at all levels of parent directories).
This function returns
tif a file named filename appears to exist. This does not mean you can necessarily read the file, only that you can find out its attributes. (On Unix and GNU/Linux, this is true if the file exists and you have execute permission on the containing directories, regardless of the protection of the file itself.)If the file does not exist, or if fascist access control policies prevent you from finding the attributes of the file, this function returns
nil.Directories are files, so
file-exists-preturnstwhen given a directory name. However, symbolic links are treated specially;file-exists-preturnstfor a symbolic link name only if the target file exists.
This function returns
tif a file named filename exists and you can read it. It returnsnilotherwise.(file-readable-p "files.texi") ⇒ t (file-exists-p "/usr/spool/mqueue") ⇒ t (file-readable-p "/usr/spool/mqueue") ⇒ nil
This function returns
tif a file named filename exists and you can execute it. It returnsnilotherwise. On Unix and GNU/Linux, if the file is a directory, execute permission means you can check the existence and attributes of files inside the directory, and open those files if their modes permit.
This function returns
tif the file filename can be written or created by you, andnilotherwise. A file is writable if the file exists and you can write it. It is creatable if it does not exist, but the specified directory does exist and you can write in that directory.In the third example below, foo is not writable because the parent directory does not exist, even though the user could create such a directory.
(file-writable-p "~/foo") ⇒ t (file-writable-p "/foo") ⇒ nil (file-writable-p "~/no-such-dir/foo") ⇒ nil
This function returns
tif you have permission to open existing files in the directory whose name as a file is dirname; otherwise (or if there is no such directory), it returnsnil. The value of dirname may be either a directory name (such as /foo/) or the file name of a file which is a directory (such as /foo, without the final slash).Example: after the following,
(file-accessible-directory-p "/foo") ⇒ nilwe can deduce that any attempt to read a file in /foo/ will give an error.
This function opens file filename for reading, then closes it and returns
nil. However, if the open fails, it signals an error using string as the error message text.
This function returns
tif deleting the file filename and then creating it anew would keep the file's owner unchanged. It also returnstfor nonexistent files.If filename is a symbolic link, then, unlike the other functions discussed here,
file-ownership-preserved-pdoes not replace filename with its target. However, it does recursively follow symbolic links at all levels of parent directories.
This function returns
tif the file filename1 is newer than file filename2. If filename1 does not exist, it returnsnil. If filename1 does exist, but filename2 does not, it returnst.In the following example, assume that the file aug-19 was written on the 19th, aug-20 was written on the 20th, and the file no-file doesn't exist at all.
(file-newer-than-file-p "aug-19" "aug-20") ⇒ nil (file-newer-than-file-p "aug-20" "aug-19") ⇒ t (file-newer-than-file-p "aug-19" "no-file") ⇒ t (file-newer-than-file-p "no-file" "aug-19") ⇒ nilYou can use
file-attributesto get a file's last modification time as a list of two numbers. See File Attributes.