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)