3 library(filesex): Extended operations on files
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
    • Packages
      • SWI-Prolog C-library
        • library(filesex): Extended operations on files
          • set_time_file/3
          • link_file/3
          • relative_file_name/3
          • directory_file_path/3
          • directory_member/3
          • copy_file/2
          • make_directory_path/1
          • copy_directory/2
          • delete_directory_and_contents/1
          • delete_directory_contents/1
          • chmod/2
Availability::- use_module(library(filesex)).(can be autoloaded)
Source[det]relative_file_name(+Path:atom, +RelToFile:atom, -RelPath:atom)
[det]relative_file_name(-Path:atom, +RelToFile:atom, +RelPath:atom)
True when RelPath is Path, relative to the file RelToFile. Path and RelTo are first handed to absolute_file_name/2, which makes the absolute and canonical. Below are two examples:
?- relative_file_name('/home/janw/nice',
                      '/home/janw/deep/dir/file', Path).
Path = '../../nice'.

?- relative_file_name(Path, '/home/janw/deep/dir/file', '../../nice').
Path = '/home/janw/nice'.

Add a terminating / to get a path relative to a directory, e.g.

?- relative_file_name('/home/janw/deep/dir/file', './', Path).
Path = 'deep/dir/file'.
All paths must be in canonical POSIX notation, i.e., using / to separate segments in the path. See prolog_to_os_filename/2.
bug
It would probably have been cleaner to use a directory as second argument. We can not do such dynamically as this predicate is defined as a syntactical operation, which implies it may be used for non-existing paths and URLs.