casa
$Rev:20696$
|
Get information about, and manipulate directories. More...
#include <Directory.h>
Public Member Functions | |
Directory () | |
Sets the path on the current working directory. | |
Directory (const Path &name) | |
Create a directory object for a file with the given path name. | |
Directory (const String &name) | |
Directory (const File &name) | |
Directory (const Directory &that) | |
Copy constructor (copy semantics). | |
~Directory () | |
Directory & | operator= (const Directory &that) |
Assignment (copy semantics). | |
Bool | isEmpty () const |
Check if directory is empty. | |
uInt | nEntries () const |
Return the number of entries in the directory (not counting . | |
Double | freeSpace () const |
Get the amount of free space (in bytes) on the file system this directory is on. | |
uInt | freeSpaceInMB () const |
void | create (Bool overwrite=True) |
Create the directory. | |
void | remove () |
Remove a directory. | |
void | removeFiles () |
Remove all files in the directory except subdirectories. | |
void | removeRecursive (Bool keepDir=False) |
Remove the directory and its contents (recursively in all subdirectories). | |
void | copy (const Path &target, Bool overwrite=True, Bool setUserWritePermission=True) const |
Copy the directory and its contents (recursively) to the target path using the system command cp -r. | |
void | copy (const String &target, Bool overwrite=True, Bool setUserWritePermission=True) const |
void | copyRecursive (const String &target) const |
Copy a directory recursively in a manual way. | |
void | move (const Path &target, Bool overwrite=True) |
Move the directory to the target path using the system command mv. | |
void | move (const String &target, Bool overwrite=True) |
Vector< String > | find (const Regex ®exp, Bool followSymLinks=False, Bool recursive=True) const |
Find all files which whose names match regex . | |
virtual Int64 | size () const |
Return the total size of everything in the Directory. | |
Bool | isNFSMounted () const |
Check if a directory is mounted via NFS or not. | |
Static Public Member Functions | |
static Vector< String > | shellExpand (const Vector< String > &files, Bool stripPath=False) |
For each element of files , find all file names matching it using shell file-expansion rules. | |
Private Member Functions | |
void | checkPath () |
Check if the path defines a directory. | |
Private Attributes | |
File | itsFile |
This variable is used when a symbolic link is given to be a directory. |
Get information about, and manipulate directories.
<h3>Intended use:</h3> Public interface
Directory provides functions to manipulate and to get information about directories. The functions for getting information (like ownership, dates) about directories are inherited from the File class. Directory itself provides functions to create, copy, move, or remove a directory. The file name can be a symbolic link resolving (eventually) to a directory.
A separate class DirectoryIterator allows one to traverse a directory to get the file names in it.
Directory dir("someDir"); // Create directory someDir in the working directory. dir.create(); cout << dir.nEntries(); // \#entries // Assign to another directory. dir = Directory("otherDir"); // Remove the directory and its contents. dir.removeRecursive();
Provide functions for manipulating and getting information about directories.
Definition at line 87 of file Directory.h.
Sets the path on the current working directory.
casa::Directory::Directory | ( | const Path & | name | ) |
Create a directory object for a file with the given path name.
An exception is thrown if the directory is illegal, i.e. if it does not exist as a directory or symbolic link or if cannot be created. Note that the directory is not created if it does not exist yet. This can be done using the function create.
When the given path name is a symbolic link, the symbolic link is resolved (recursively) and the resulting directory name is used instead.
casa::Directory::Directory | ( | const String & | name | ) |
casa::Directory::Directory | ( | const File & | name | ) |
casa::Directory::Directory | ( | const Directory & | that | ) |
Copy constructor (copy semantics).
void casa::Directory::checkPath | ( | ) | [private] |
Check if the path defines a directory.
Also resolve possible symlinks.
void casa::Directory::copy | ( | const Path & | target, |
Bool | overwrite = True , |
||
Bool | setUserWritePermission = True |
||
) | const |
Copy the directory and its contents (recursively) to the target path using the system command cp -r.
If the target already exists (as a file, directory or symlink), and overwrite=True, it will first be removed. The target directory is created and the data in the source directory is copied to the new directory.
An exception is thrown if:
- the target directory is not writable
- or the target already exists and overwrite!=True
Caution: 1; The behavior of this copy function is different from cp when the target directory already exists; Cp copies the source to a subdirectory of the target, while copy recreates the target;
2; When a readonly file is copied, cp
the resulting file is also readonly; Therefore chmod
is used to set user write permission after the copy; The flag setUserWritePermission
can be set to False when that should not be done;
Referenced by copy().
void casa::Directory::copy | ( | const String & | target, |
Bool | overwrite = True , |
||
Bool | setUserWritePermission = True |
||
) | const [inline] |
Definition at line 242 of file Directory.h.
References copy().
void casa::Directory::copyRecursive | ( | const String & | target | ) | const |
Copy a directory recursively in a manual way.
This is used in a copy using the system command is not possible (like on the Cray XT3).
void casa::Directory::create | ( | Bool | overwrite = True | ) |
Create the directory.
If the directory exists and overwrite=True, it will be removed (recursively). Otherwise an exception is thrown.
Vector<String> casa::Directory::find | ( | const Regex & | regexp, |
Bool | followSymLinks = False , |
||
Bool | recursive = True |
||
) | const |
Find all files which whose names match regex
.
You can do this recursively (default) or not. Note that the matching is a regular expression match, not a shell file-expansion match. However, a shell file pattern can be converted to a regexp using the function Regex::fromPattern . Regex::fromString
allows one to convert a file name to a regexp and to use this function for eact file name matching.
To match the semantics of the unix find
command, symbolic links are not followed by default, but this behavior can be over-ridden.
Double casa::Directory::freeSpace | ( | ) | const |
Get the amount of free space (in bytes) on the file system this directory is on.
When the directory path is a symbolic link, that link is resolved first.
Referenced by freeSpaceInMB().
uInt casa::Directory::freeSpaceInMB | ( | ) | const [inline] |
Definition at line 251 of file Directory.h.
References freeSpace().
Bool casa::Directory::isEmpty | ( | ) | const |
Check if directory is empty.
If the directory does not exist, an exception will be thrown.
Bool casa::Directory::isNFSMounted | ( | ) | const |
Check if a directory is mounted via NFS or not.
void casa::Directory::move | ( | const Path & | target, |
Bool | overwrite = True |
||
) |
Move the directory to the target path using the system command mv.
If the target already exists (as a file, directory or symlink), and overwrite=True, it will first be removed. The source directory is moved (thus renamed) to the target.
An exception is thrown if:
- the target directory is not writable
- or the target already exists and overwrite!=True
Caution: The behavior of this move function is different from mv when the target directory already exists; Mv moves the source to a subdirectory of the target, while move recreates the target;
Referenced by move().
void casa::Directory::move | ( | const String & | target, |
Bool | overwrite = True |
||
) | [inline] |
Definition at line 247 of file Directory.h.
References move().
uInt casa::Directory::nEntries | ( | ) | const |
Return the number of entries in the directory (not counting .
and ..). If the directory does not exist, an exception will be thrown.
void casa::Directory::remove | ( | ) |
Remove a directory.
An exception is thrown if the directory is not empty. If a symbolic link is given, the link chain pointing to the directory will also be removed.
void casa::Directory::removeFiles | ( | ) |
Remove all files in the directory except subdirectories.
The directory itself is not removed.
void casa::Directory::removeRecursive | ( | Bool | keepDir = False | ) |
Remove the directory and its contents (recursively in all subdirectories).
If keepDir==True
, the directory itself is kept (to keep properties like placement on Lustre).
static Vector<String> casa::Directory::shellExpand | ( | const Vector< String > & | files, |
Bool | stripPath = False |
||
) | [static] |
For each element of files
, find all file names matching it using shell file-expansion rules.
Return the list of all matched files as absolute path + file names. You may optionally drop the path and just return the file names. Note tha if files(i)
contains a path as well as a file name, no matching is done on the path, just the trailing file name. Throws an AipsError if the shell pattern is illegal.
virtual Int64 casa::Directory::size | ( | ) | const [virtual] |
Return the total size of everything in the Directory.
If the Directory does not exist, an exception will be thrown.
Reimplemented from casa::File.
File casa::Directory::itsFile [private] |
This variable is used when a symbolic link is given to be a directory.
Definition at line 237 of file Directory.h.