@node Files
@section Files

@menu
* Files - Dictionary::
* Files - C Reference::
@end menu

@node Files - Dictionary
@subsection Dictionary

@lspindex directory
@defun directory pathspec

This function does not have any additional arguments other than the ones described in ANSI @bibcite{ANSI}. To list files and directories, it follows the rules for matching pathnames described in @ref{Filenames - Wild pathnames and matching}. In short, you have the following practical examples:

@float Table, tab:examples-using-directory
@caption{Examples of using @code{directory}}
@multitable @columnfractions .25 .75
@headitem Argument @tab Meaning
@item @code{"/home/jlr/*.*"} @tab List all files in directory @code{/home/jlr/} Note that it lists only files, not directories!
@item @code{"/home/jlr/*"} @tab Same as before, but only files without type.
@item @code{"/home/jlr/*/"} @tab List all directories contained in @code{/home/jlr/}. Nested directories are not navigated.
@item @code{"/home/jlr/**/*.*"} @tab List all files in all directories contained in @code{/home/jlr/}, recursively. Nested directories are navigated.
@end multitable
@end float
@end defun

@defun rename-file filespec new-name &key (if-exists :error)

In addition to the arguments described in ANSI @bibcite{ANSI}, the @code{rename-file} function in ECL has an @code{:if-exists} keyword argument that specifies what happens when a file with the new name already exists. Valid values of this argument are:

@multitable @columnfractions .25 .75
@headitem Argument @tab Behaviour of the @code{rename-file} function
@item @code{:error} @tab Signal an error
@item @code{:supersede}, @code{t} @tab Overwrite the existing file
@item @code{nil} @tab Don't overwrite the existing file, don't signal an error
@end multitable
@end defun

@node Files - C Reference
@subsection C Reference

@subsubsection ANSI Dictionary
Common Lisp and C equivalence

@multitable @columnfractions .3 .7
@headitem Lisp symbol @tab C function
@item @clhs{f_del_fi.htm,delete-file} @tab cl_object cl_delete_file(cl_object filespec)
@item @clhs{f_dir.htm,directory} @tab cl_object cl_directory(cl_narg narg, cl_object pathspec, ...)
@item @clhs{f_ensu_1.htm,ensure-directories-exist} @tab cl_object cl_ensure_directories_exist(cl_narg narg, cl_object pathspec, ...)
@item @clhs{f_file_a.htm,file-author} @tab cl_object cl_file_author(cl_object pathspec)
@item @clhs{f_file_e.htm,file-error-pathname} @tab [Only in Common Lisp]
@item @clhs{f_file_w.htm,file-write-date} @tab cl_object cl_file_write_date(cl_object pathspec)
@item @clhs{f_probe_.htm,probe-file} @tab cl_object cl_probe_file(cl_object pathspec)
@item @clhs{f_rn_fil.htm,rename-file} @tab cl_object cl_rename_file(cl_narg narg, cl_object filespec, cl_object new_name, ...)
@item @clhs{f_tn.htm,truename} @tab cl_object cl_truename(cl_object filespec)
@end multitable
