1 #ifndef INCLUDE_AL_FILE_HPP 
    2 #define INCLUDE_AL_FILE_HPP 
   59 #ifndef AL_FILE_DELIMITER_STR 
   61 #define AL_FILE_DELIMITER_STR "\\" 
   63 #define AL_FILE_DELIMITER_STR "/" 
   67 #define AL_FILE_DELIMITER (AL_FILE_DELIMITER_STR[0]) 
   69 #define AL_PATH_MAX (4096) 
   73 typedef double al_sec; 
 
   77 std::string demangle(
const char *name); 
 
   91   explicit FilePath(
const std::string &fullpath);
 
   94   const std::string &
file()
 const { 
return mFile; }
 
   97   const std::string &
path()
 const { 
return mPath; }
 
  143     FileInfo& type(Type v){ mType=v; 
return *
this; }
 
  146     const Type type()
 const { 
return mType; }
 
  149     FileInfo& name(
const std::string& v){ mName=v; 
return *
this; }
 
  152     const std::string& name()
 const { 
return mName; }
 
  171   File(std::string 
path = 
".", std::string 
mode = 
"r", 
bool open_ = 
false);
 
  209     return write(v.data(), 1, 
static_cast<int>(v.length()));
 
  213   int write(
const void *v, 
int itemSizeInBytes, 
int items = 1) {
 
  214     int itemsWritten = 
static_cast<int>(fwrite(v, itemSizeInBytes, items, mFP));
 
  215     mSizeBytes += itemsWritten * itemSizeInBytes;
 
  221     return static_cast<int>(fread(v, 
size, items, mFP));
 
  231   const std::string &
mode()
 const { 
return mMode; }
 
  234   const std::string &
path()
 const { 
return mPath; }
 
  237   size_t size()
 const { 
return mSizeBytes; }
 
  267   static int write(
const std::string &
path, 
const std::string &data);
 
  271   static bool copy(
const std::string &srcPath, 
const std::string &dstPath,
 
  272                    unsigned int bufferSize = 1e6);
 
  293   static bool isRelativePath(
const std::string &
path);
 
  300   static bool isSamePath(
const std::string &path1, 
const std::string &path2);
 
  309                               const std::string &suffix = 
"");
 
  328   static bool exists(
const std::string &name, 
const std::string &
path) {
 
  344   static bool searchBack(std::string &rootPath, 
const std::string &matchPath,
 
  355   static al_sec modificationTime(
const char *
path);
 
  375   void allocContent(
int n);
 
  388   char previousDirectory[4096];
 
  391   static std::mutex mDirectoryLock; 
 
  433   static bool make(
const std::string &path);
 
  436   static bool remove(
const std::string &path);
 
  452   typedef std::vector<FilePath>::iterator iterator;
 
  477   int count() { 
return static_cast<int>(mFiles.size()); }
 
  481   void print(std::ostream &stream = std::cout) 
const;
 
  483   FilePath &operator[](
int i) { 
return mFiles[i]; }
 
  484   iterator begin() { 
return mFiles.begin(); }
 
  485   iterator end() { 
return mFiles.end(); }
 
  487   void add(FilePath &fp) { mFiles.push_back(fp); }
 
  488   void add(FilePath &&fp) { mFiles.push_back(fp); }
 
  489   void add(FileList 
const &fl) {
 
  490     mFiles.insert(mFiles.end(), fl.mFiles.begin(), fl.mFiles.end());
 
  492   void sort(
bool (*f)(FilePath, FilePath)) { 
std::sort(begin(), end(), f); }
 
  496   std::vector<FilePath> mFiles;
 
  504   typedef std::pair<std::string, bool> searchpath;
 
  505   typedef std::list<searchpath> searchpathlist;
 
  506   typedef std::list<searchpath>::iterator iterator;
 
  510   SearchPaths(
int argc, 
char *
const argv[], 
bool recursive = 
true);
 
  521   void addRelativePath(std::string rel, 
bool recursive = 
true) {
 
  527   void addAppPaths(
int argc, 
char *
const argv[], 
bool recursive = 
true);
 
  528   void addAppPaths(
int argc, 
const char **argv, 
bool recursive = 
true);
 
  529   void addAppPaths(std::string path, 
bool recursive = 
true);
 
  532   const std::string &appPath()
 const { 
return mAppPath; }
 
  534   void print(std::ostream &stream = std::cout) 
const;
 
  536   iterator begin() { 
return mSearchPaths.begin(); }
 
  537   iterator end() { 
return mSearchPaths.end(); }
 
  540   std::list<searchpath> mSearchPaths;
 
  541   std::string mAppPath;
 
  548 FileList itemListInDir(std::string 
const &dir);
 
  551 FileList fileListFromDir(std::string 
const &dir);
 
  554 FilePath searchFileFromDir(std::string 
const &filename, std::string 
const &dir);
 
  557 FileList filterInDir(std::string 
const &dir,
 
  558                      std::function<
bool(FilePath 
const &)> f,
 
  559                      bool recursive = 
false);
 
  562 bool checkExtension(std::string 
const &filename, std::string 
const &extension);
 
  563 bool checkExtension(FilePath 
const &filepath, std::string 
const &extension);
 
static bool make(const std::string &path)
Constructor. This does not attempt to open the directory.
 
static bool remove(const std::string &path)
Remove a directory.
 
static bool removeRecursively(const std::string &path)
Remove a directory recursively.
 
static bool searchBack(std::string &path, int maxDepth=6)
 
static bool remove(const std::string &path)
Delete file from file system.
 
static bool exists(const std::string &path)
Returns whether a file or directory exists.
 
static std::string absolutePath(const std::string &path)
Convert relative paths to absolute paths.
 
static bool exists(const std::string &name, const std::string &path)
Returns whether a file in a directory exists.
 
static int write(const std::string &path, const void *v, int size, int items=1)
Quick and dirty write memory to file.
 
static std::string read(const std::string &path)
Quick and dirty read of all bytes from file.
 
File & path(const std::string &v)
Set path of file.
 
static std::string conformPathToOS(const std::string &path)
Conforms path.
 
const std::string & path() const
Returns path string.
 
static std::string conformDirectory(const std::string &dir)
Returns string ensured to having an ending delimiter.
 
const std::string & mode() const
Returns file i/o mode string.
 
static std::string baseName(const std::string &path, const std::string &suffix="")
Returns the base name of path.
 
File(std::string path=".", std::string mode="r", bool open_=false)
 
static std::string directory(const std::string &path)
Returns the directory part of path.
 
int write(const std::string &v)
Write string to file.
 
static int write(const std::string &path, const std::string &data)
Quick and dirty write character string to file.
 
int write(const void *v, int itemSizeInBytes, int items=1)
Write memory elements to file.
 
static std::string currentPath()
 
const char * readAll()
Returns character string of file contents (read mode only)
 
int read(void *v, int size, int items=1)
Read memory elements from file.
 
bool open(const std::string &path, const std::string &mode="r")
Open file.
 
static bool isDirectory(const std::string &path)
Returns true if path is a directory.
 
static bool copy(const std::string &srcPath, const std::string &dstPath, unsigned int bufferSize=1e6)
 
File & mode(const std::string &v)
Set i/o mode.
 
static std::string extension(const std::string &path)
Returns extension of file name.
 
FILE * filePointer()
Return size file (or 0 on failure)
 
static bool searchBack(std::string &rootPath, const std::string &matchPath, int maxDepth=6)
Search for file or directory back from current directory.
 
bool opened() const
Returns whether file is open.
 
size_t size() const
Returns size, in bytes, of file contents.
 
bool open()
Open file using member variables.
 
FilePath & operator()()
return currently selected file in list
 
FilePath & select(int i)
find a file in list
 
FilePath(const std::string &fullpath)
 
const std::string & file() const
Get file name without directory.
 
const std::string & path() const
Get path (directory) of file.
 
bool valid() const
Returns whether file part is valid.
 
FilePath & path(const std::string &v)
Set path (directory) of file.
 
FilePath & file(const std::string &v)
Set file name without directory.
 
FilePath(const std::string &file, const std::string &path)
 
std::string filepath() const
Get file with directory.
 
FilePath find(const std::string &filename)
find a file in the searchpaths
 
void addAppPaths(int argc, char *const argv[], bool recursive=true)
 
void addSearchPath(const std::string &path, bool recursive=true)
add a path to search in; recursive searching is optional
 
void sort(T &value1, T &value2)