File name processing

6.26 | File name processing

6.26.1 | `absolute_file_name/2`

Templates

  `absolute_file_name(+atom, atom)`

Description
`absolute_file_name(File1, File2)` succeeds if `File2` is the absolute pathname associated to the relative file name `File1`. `File1` can contain `$``VAR_NAME` sub-strings. When such a sub-string is encountered, it is expanded with the value of the environment variable whose name is `VAR_NAME` if exists (otherwise no expansion is done). `File1` can also begin with a sub-string `~``USER_NAME``/`, this is expanded as the home directory of the user `USER_NAME`. If `USER_NAME` does not exist `File1` is an invalid pathname. If no `USER_NAME` is given (i.e. `File1` begins with `~/`) the `~` character is expanded as the value of the environment variable `HOME`. If the `HOME` variable is not defined `File1` is an invalid pathname. Relative references to the current directory (`/./` sub-string) and to the parent directory (`/../` sub-strings) are removed and no longer appear in `File2`. `File1` is also invalid if it contains too many `/../` consecutive sub-strings (i.e. parent directory relative references). Finally if `File1` is `user` then `File2` is also unified with `user` to allow this predicate to be called on Prolog file names (since `user` in DEC-10 input/output predicates denotes the current input/output stream).
Most predicates using a file name implicitly call this predicate to obtain the desired file, e.g. `open/4`.
Errors

`File1` is a variable |  | `instantiation_error`
`File1` is neither a variable nor an atom |  | `type_error(atom, File1)`
`File2` is neither a variable nor an atom |  | `type_error(atom, File2)`
`File1` is an atom but not a valid pathname |  | `domain_error(os_path, File1)`

Portability
GNU Prolog predicate.

6.26.2 | `decompose_file_name/4`

Templates

  `decompose_file_name(+atom, ?atom, ?atom, ?atom)`

Description
`decompose_file_name(File, Directory, Prefix, Suffix)` decomposes the pathname `File` and extracts the `Directory` part (characters before the last `/`), the `Prefix` part (characters after the last `/` and before the last `.` or until the end if there is no suffix) and the `Suffix` part (characters from the last `.` to the end of the string).
Errors

`File` is a variable |  | `instantiation_error`
`File` is neither a variable nor an atom |  | `type_error(atom, File)`
`Directory` is neither a variable nor an atom |  | `type_error(atom, Directory)`
`Prefix` is neither a variable nor an atom |  | `type_error(atom, Prefix)`
`Suffix` is neither a variable nor an atom |  | `type_error(atom, Suffix)`

Portability
GNU Prolog predicate.

6.26.3 | `prolog_file_name/2`

Templates

  `prolog_file_name(+atom, ?atom)`

Description
`prolog_file_name(File1, File2)` unifies `File2` with the Prolog file name associated to `File1`. More precisely `File2` is computed as follows:

- if `File1` has a suffix or if it is `user` then `File2` is unified with `File1`.
- else if the file whose name is `File1` + `'.pl'` exists then `File2` is unified with this name.
- else if the file whose name is `File1` + `'.pro'` exists then `File2` is unified with this name.
- else `File2` is unified with the name `File1` + `'.pl'`.

This predicate uses `absolute_file_name/2` to check the existence of a file (section 6.26.1).
Errors

`File1` is a variable |  | `instantiation_error`
`File1` is neither a variable nor an atom |  | `type_error(atom, File1)`
`File2` is neither a variable nor an atom |  | `type_error(atom, File2)`
`File1` is an atom but not a valid pathname |  | `domain_error(os_path, File1)`

Portability
GNU Prolog predicate.

Copyright (C) 1999,2000 Daniel Diaz
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
More about the copyright