- data Permissions = Permissions {
- readable :: Bool
- writable :: Bool
- executable :: Bool
- searchable :: Bool
- createDirectory :: FilePath -> IO ()
- removeDirectory :: FilePath -> IO ()
- removeFile :: FilePath -> IO ()
- renameDirectory :: FilePath -> FilePath -> IO ()
- renameFile :: FilePath -> FilePath -> IO ()
- getDirectoryContents :: FilePath -> IO [FilePath]
- getCurrentDirectory :: IO FilePath
- setCurrentDirectory :: FilePath -> IO ()
- doesFileExist :: FilePath -> IO Bool
- doesDirectoryExist :: FilePath -> IO Bool
- getPermissions :: FilePath -> IO Permissions
- setPermissions :: FilePath -> Permissions -> IO ()
- getModificationTime :: FilePath -> IO ClockTime
Documentation
data Permissions Source
Permissions | |
|
createDirectory :: FilePath -> IO ()Source
creates a new directory createDirectory
dirdir
which is
initially empty, or as near to empty as the operating system
allows.
The operation may fail with:
-
isPermissionError
/PermissionDenied
The process has insufficient privileges to perform the operation.[EROFS, EACCES]
-
isAlreadyExistsError
/AlreadyExists
The operand refers to a directory that already exists.[EEXIST]
-
HardwareFault
A physical I/O error has occurred.[EIO]
-
InvalidArgument
The operand is not a valid directory name.[ENAMETOOLONG, ELOOP]
-
NoSuchThing
There is no path to the directory.[ENOENT, ENOTDIR]
-
ResourceExhausted
Insufficient resources (virtual memory, process file descriptors, physical disk space, etc.) are available to perform the operation.[EDQUOT, ENOSPC, ENOMEM, EMLINK]
-
InappropriateType
The path refers to an existing non-directory object.[EEXIST]
removeDirectory :: FilePath -> IO ()Source
removes an existing directory dir. The
implementation may specify additional constraints which must be
satisfied before a directory can be removed (e.g. the directory has to
be empty, or may not be in use by other processes). It is not legal
for an implementation to partially remove a directory unless the
entire directory is removed. A conformant implementation need not
support directory removal in all situations (e.g. removal of the root
directory).
removeDirectory
dir
The operation may fail with:
-
HardwareFault
A physical I/O error has occurred. EIO -
InvalidArgument
The operand is not a valid directory name. [ENAMETOOLONG, ELOOP] -
isDoesNotExistError
/NoSuchThing
The directory does not exist.[ENOENT, ENOTDIR]
-
isPermissionError
/PermissionDenied
The process has insufficient privileges to perform the operation.[EROFS, EACCES, EPERM]
-
UnsatisfiedConstraints
Implementation-dependent constraints are not satisfied.[EBUSY, ENOTEMPTY, EEXIST]
-
UnsupportedOperation
The implementation does not support removal in this situation.[EINVAL]
-
InappropriateType
The operand refers to an existing non-directory object.[ENOTDIR]
removeFile :: FilePath -> IO ()Source
removeFile
file removes the directory entry for an existing file
file, where file is not itself a directory. The
implementation may specify additional constraints which must be
satisfied before a file can be removed (e.g. the file may not be in
use by other processes).
The operation may fail with:
-
HardwareFault
A physical I/O error has occurred.[EIO]
-
InvalidArgument
The operand is not a valid file name.[ENAMETOOLONG, ELOOP]
-
isDoesNotExistError
/NoSuchThing
The file does not exist.[ENOENT, ENOTDIR]
-
isPermissionError
/PermissionDenied
The process has insufficient privileges to perform the operation.[EROFS, EACCES, EPERM]
-
UnsatisfiedConstraints
Implementation-dependent constraints are not satisfied.[EBUSY]
-
InappropriateType
The operand refers to an existing directory.[EPERM, EINVAL]
renameDirectory :: FilePath -> FilePath -> IO ()Source
changes the name of an existing
directory from old to new. If the new directory
already exists, it is atomically replaced by the old directory.
If the new directory is neither the old directory nor an
alias of the old directory, it is removed as if by
renameDirectory
old newremoveDirectory
. A conformant implementation need not support
renaming directories in all situations (e.g. renaming to an existing
directory, or across different physical devices), but the constraints
must be documented.
On Win32 platforms, renameDirectory
fails if the new directory already
exists.
The operation may fail with:
-
HardwareFault
A physical I/O error has occurred.[EIO]
-
InvalidArgument
Either operand is not a valid directory name.[ENAMETOOLONG, ELOOP]
-
isDoesNotExistError
/NoSuchThing
The original directory does not exist, or there is no path to the target.[ENOENT, ENOTDIR]
-
isPermissionError
/PermissionDenied
The process has insufficient privileges to perform the operation.[EROFS, EACCES, EPERM]
-
ResourceExhausted
Insufficient resources are available to perform the operation.[EDQUOT, ENOSPC, ENOMEM, EMLINK]
-
UnsatisfiedConstraints
Implementation-dependent constraints are not satisfied.[EBUSY, ENOTEMPTY, EEXIST]
-
UnsupportedOperation
The implementation does not support renaming in this situation.[EINVAL, EXDEV]
-
InappropriateType
Either path refers to an existing non-directory object.[ENOTDIR, EISDIR]
renameFile :: FilePath -> FilePath -> IO ()Source
changes the name of an existing file system
object from old to new. If the new object already
exists, it is atomically replaced by the old object. Neither
path may refer to an existing directory. A conformant implementation
need not support renaming files in all situations (e.g. renaming
across different physical devices), but the constraints must be
documented.
renameFile
old new
The operation may fail with:
-
HardwareFault
A physical I/O error has occurred.[EIO]
-
InvalidArgument
Either operand is not a valid file name.[ENAMETOOLONG, ELOOP]
-
isDoesNotExistError
/NoSuchThing
The original file does not exist, or there is no path to the target.[ENOENT, ENOTDIR]
-
isPermissionError
/PermissionDenied
The process has insufficient privileges to perform the operation.[EROFS, EACCES, EPERM]
-
ResourceExhausted
Insufficient resources are available to perform the operation.[EDQUOT, ENOSPC, ENOMEM, EMLINK]
-
UnsatisfiedConstraints
Implementation-dependent constraints are not satisfied.[EBUSY]
-
UnsupportedOperation
The implementation does not support renaming in this situation.[EXDEV]
-
InappropriateType
Either path refers to an existing directory.[ENOTDIR, EISDIR, EINVAL, EEXIST, ENOTEMPTY]
getDirectoryContents :: FilePath -> IO [FilePath]Source
returns a list of all entries
in dir.
getDirectoryContents
dir
The operation may fail with:
-
HardwareFault
A physical I/O error has occurred.[EIO]
-
InvalidArgument
The operand is not a valid directory name.[ENAMETOOLONG, ELOOP]
-
isDoesNotExistError
/NoSuchThing
The directory does not exist.[ENOENT, ENOTDIR]
-
isPermissionError
/PermissionDenied
The process has insufficient privileges to perform the operation.[EACCES]
-
ResourceExhausted
Insufficient resources are available to perform the operation.[EMFILE, ENFILE]
-
InappropriateType
The path refers to an existing non-directory object.[ENOTDIR]
getCurrentDirectory :: IO FilePathSource
If the operating system has a notion of current directories,
getCurrentDirectory
returns an absolute path to the
current directory of the calling process.
The operation may fail with:
-
HardwareFault
A physical I/O error has occurred.[EIO]
-
isDoesNotExistError
/NoSuchThing
There is no path referring to the current directory.[EPERM, ENOENT, ESTALE...]
-
isPermissionError
/PermissionDenied
The process has insufficient privileges to perform the operation.[EACCES]
-
ResourceExhausted
Insufficient resources are available to perform the operation. -
UnsupportedOperation
The operating system has no notion of current directory.
Note that in a concurrent program, the current directory is global
state shared between all threads of the process. When using
filesystem operations from multiple threads, it is therefore highly
recommended to use absolute rather than relative FilePath
s.
setCurrentDirectory :: FilePath -> IO ()Source
If the operating system has a notion of current directories,
changes the current
directory of the calling process to dir.
setCurrentDirectory
dir
The operation may fail with:
-
HardwareFault
A physical I/O error has occurred.[EIO]
-
InvalidArgument
The operand is not a valid directory name.[ENAMETOOLONG, ELOOP]
-
isDoesNotExistError
/NoSuchThing
The directory does not exist.[ENOENT, ENOTDIR]
-
isPermissionError
/PermissionDenied
The process has insufficient privileges to perform the operation.[EACCES]
-
UnsupportedOperation
The operating system has no notion of current directory, or the current directory cannot be dynamically changed. -
InappropriateType
The path refers to an existing non-directory object.[ENOTDIR]
Note that in a concurrent program, the current directory is global
state shared between all threads of the process. When using
filesystem operations from multiple threads, it is therefore highly
recommended to use absolute rather than relative FilePath
s.
doesFileExist :: FilePath -> IO BoolSource
The operation doesFileExist
returns True
if the argument file exists and is not a directory, and False
otherwise.
doesDirectoryExist :: FilePath -> IO BoolSource
The operation doesDirectoryExist
returns True
if the argument file
exists and is a directory, and False
otherwise.
setPermissions :: FilePath -> Permissions -> IO ()Source
getModificationTime :: FilePath -> IO ClockTimeSource
The getModificationTime
operation returns the
clock time at which the file or directory was last modified.
The operation may fail with:
-
isPermissionError
if the user is not permitted to access the modification time; or -
isDoesNotExistError
if the file or directory does not exist.