cpp/experimental/fs

The Filesystem library, ISO/IEC TS 18822:2015, provides facilities for performing operations on file systems and their components, such as paths, regular files, and directories.

This library is an optional technical specification and may be unavailable if a hierarchical file system is not accessible to the implementation, or if it does not provide the necessary capabilities. Some features may not be available if they are not supported by the underlying file system (e.g. FAT filesystem has no hardlinks, softlinks, and other features)

The behavior is undefined if the calls to functions in this library introduce a file system race, that is, when multiple threads, processes, or computers interleave access and modification to the same object in a file system.

This library is directly based on boost.filesystem, which is currently available on more compilers and platforms than this experimental technical specification.

Library-wide definitions

 * file: a file system object that holds data, can be written to, read from, or both. Files have names, attributes, one of which is file type:
 * directory: a file that acts as a container of directory entries, which identify other files (some of which may be other, nested, directories). When discussing a particular file, the directory in which it appears as an entry is its parent directory. The parent directory can be represented by the relative pathname
 * hard link: a directory entry that associates a name with an existing file. If multiple hard links are supported, the file is removed after the last hard link to it is removed.
 * symbolic link: a directory entry that associates a name with a path, which may or may not exist.
 * regular file: a file that is not one of the other file types


 * file name: a string of characters that names a file. Permissible characters, case sensitivity, maximum length, and the disallowed names are implementation-defined. Names (dot) and  (dot-dot) have special meaning at library level.
 * path: sequence of elements that identifies a file. It begins with an optional (e.g.  or ), followed by optional  (e.g.  on Unix), followed by a sequence of zero or more file names (all but last of which have to be directories or links to directories). The native format (e.g. which characters are used as separators) and character encoding of the string representation of a path (the pathname) is implementation-defined, this library provides portable representation of paths.
 * absolute path: a path that unambiguously identifies the location of a file
 * canonical path: an absolute path that includes no symlinks, or  elements.
 * relative path: a path that identifies a file relative to some location on the file system. The special path names (dot, "current directory") and  (dot-dot, "parent directory") are relative paths.