/// @name Disk Accessors
/// @{
public:
- /// This function determines if the object referenced by this path is
- /// a file or not. This function accesses the underlying file system to
- /// determine the type of entity referenced by the path.
- /// @returns true if this path name references a file.
- /// @brief Determines if the path name references a file.
- bool isFile() const;
-
- /// This function determines if the object referenced by this path is a
- /// directory or not. This function accesses the underlying file system to
- /// determine the type of entity referenced by the path.
- /// @returns true if the path name references a directory
- /// @brief Determines if the path name references a directory.
- bool isDirectory() const;
-
- /// This function determines if the path refers to a hidden file. The
- /// notion of hidden files is defined by the underlying system. The
- /// system may not support hidden files in which case this function always
- /// returns false on such systems. Hidden files have the "hidden"
- /// attribute set on Win32. On Unix, hidden files start with a period.
- /// @brief Determines if the path name references a hidden file.
- bool isHidden() const;
-
/// This function determines if the path name in this object references
/// the root (top level directory) of the file system. The details of what
/// is considered the "root" may vary from system to system so this method
return GetRootDirectory();
}
-bool
-Path::isFile() const {
- if (!exists())
- return false;
- struct stat buf;
- if (stat(path.c_str(), &buf) != 0) {
- ThrowErrno(path + ": can't determine type of path object: ");
- }
- return S_ISREG(buf.st_mode);
-}
-
-bool
-Path::isDirectory() const {
- if (!exists())
- return false;
- struct stat buf;
- if (0 != stat(path.c_str(), &buf)) {
- ThrowErrno(path + ": can't determine type of path object: ");
- }
- return S_ISDIR(buf.st_mode);
-}
-
-bool
-Path::isHidden() const {
- if (!exists())
- return false;
- size_t slash = path.rfind('/');
- return (slash != std::string::npos &&
- slash < path.length()-1 &&
- path[slash+1] == '.') ||
- (!path.empty() && slash == std::string::npos && path[0] == '.');
-}
std::string
Path::getBasename() const {
bool
Path::getDirectoryContents(std::set<Path>& result) const {
- if (!isDirectory())
- return false;
DIR* direntries = ::opendir(path.c_str());
if (direntries == 0)
ThrowErrno(path + ": can't open directory");
}
// FIXME: the above set of functions don't map to Windows very well.
-bool
-Path::isFile() const {
- WIN32_FILE_ATTRIBUTE_DATA fi;
- BOOL rc = GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi);
- if (rc)
- return !(fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
- else if (GetLastError() != ERROR_FILE_NOT_FOUND) {
- ThrowError("isFile(): " + std::string(path) + ": Can't get status: ");
- }
- return false;
-}
-
-bool
-Path::isDirectory() const {
- WIN32_FILE_ATTRIBUTE_DATA fi;
- BOOL rc = GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi);
- if (rc)
- return fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
- else if (GetLastError() != ERROR_FILE_NOT_FOUND)
- ThrowError("isDirectory(): " + std::string(path) + ": Can't get status: ");
- return false;
-}
-
-bool
-Path::isHidden() const {
- WIN32_FILE_ATTRIBUTE_DATA fi;
- BOOL rc = GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi);
- if (rc)
- return fi.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN;
- else if (GetLastError() != ERROR_FILE_NOT_FOUND)
- ThrowError("isHidden(): " + std::string(path) + ": Can't get status: ");
- return false;
-}
bool
Path::isRootDirectory() const {