Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
3.1 KiB

2 years ago
// Copyright(C) 1999-2020, 2022 National Technology & Engineering Solutions
// of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
// NTESS, the U.S. Government retains certain rights in this software.
//
// See packages/seacas/LICENSE for details
#pragma once
#include <ctime> // for time_t
#include <string> // for string, operator!=, etc
#include <sys/types.h> // for off_t
/*! \class FileInfo
* \author Greg Sjaardema
* \brief Return information about the specified file.
*
* A very minimal class (at least it used to be) for providing
* information about a file. FileInfo provides information about a
* file's name, path, and type (directory, symbolic link, file). Other
* information could be added as needed. It currently does not cache
* any information, so if it is heavily used, a caching capability
* should be added. See the Qt Toolkit QFileInfo class for a richer
* file class.
*/
class FileInfo
{
public:
//! Empty class referring to no file.
FileInfo();
//! Create object referring to file with name \a filename
//! \param my_filename name of file
explicit FileInfo(std::string my_filename);
//! Create object referring to file with name \a filename
//! \param my_filename name of file
explicit FileInfo(const char *my_filename);
//! Copy constructor
FileInfo(const FileInfo & /*copy_from*/);
//! Constructor
//! \param dirpath Directory Path
//! \param my_filename base filename
FileInfo(const std::string &dirpath, const std::string &my_filename);
~FileInfo();
bool exists() const; //!< returns True if file exists, false if nonexistent
bool is_readable() const; //!< Exists and is readable
bool is_writable() const; //!< Exists and is writable
bool is_executable() const; //!< Exists and is executable
bool is_file() const; //!< Is a plain file
bool is_dir() const; //!< Is a directory
bool is_symlink() const; //!< Is a symbolic link to a file or directory
time_t modified() const; //!< Time of last data modification. See 'man stat(2)'
time_t accessed() const; //!< Time of last access
time_t created() const; //!< Time of last status change. (creation, chmod, ...)
off_t size() const; //!< File size in bytes. Only if is_file() == true
std::string filename() const; //!< Complete filename including path
std::string basename() const; //!< strip path and extension
std::string tailname() const; //!< basename() + extension()
std::string extension() const; //!< file extension.
std::string pathname() const; //!< directory path, no filename
std::string realpath() const; //!< canonicalized absolute path
void set_filename(const std::string &name);
void set_filename(const char *name);
bool operator==(const FileInfo &other) const { return filename_ == other.filename_; }
bool operator!=(const FileInfo &other) const { return filename_ != other.filename_; }
bool remove_file();
private:
std::string filename_{};
bool exists_{false}; ///< this is used frequently, check on creation
bool readable_{false}; ///< this is used frequently, check on creation
};