diff options
Diffstat (limited to 'Src/WAT/wa_files.cpp')
-rw-r--r-- | Src/WAT/wa_files.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/Src/WAT/wa_files.cpp b/Src/WAT/wa_files.cpp new file mode 100644 index 00000000..84e0a1fa --- /dev/null +++ b/Src/WAT/wa_files.cpp @@ -0,0 +1,94 @@ +#include "WAT.h" + +bool wa::files::file_exists( const char *p_filename ) +{ + if ( p_filename == NULL ) + return false; + + + struct stat l_buffer; + return ( stat( p_filename, &l_buffer ) == 0 ); +} + +bool wa::files::file_exists( const std::string &p_filename ) +{ + return wa::files::file_exists( p_filename.c_str() ); +} + +bool wa::files::file_exists( const wchar_t *p_filename ) +{ + return wa::files::file_exists( wa::strings::convert::to_string( p_filename ) ); +} + + +int wa::files::file_size( const char *p_filename ) +{ + int l_file_size = -1; + + struct stat l_file_info{}; + + + if ( !stat( p_filename, &l_file_info ) ) + l_file_size = l_file_info.st_size; + + + return l_file_size; +} + +int wa::files::file_size( const wchar_t *p_filename ) +{ + std::string l_filename = wa::strings::convert::to_string( p_filename ); + + return file_size( l_filename.c_str() ); +} + + +bool wa::files::folder_exists( const char *p_folder ) +{ + struct stat info; + + if ( stat( p_folder, &info) != 0 ) + return false; + else if ( info.st_mode & S_IFDIR ) + return true; + else + return false; +} + + +bool wa::files::getFilenamesFromFolder( std::vector<std::string> &p_result, const std::string &p_folder_path, const std::string &p_reg_ex, const size_t p_limit ) +{ + _finddata_t l_file_info; + std::string l_file_pattern = p_folder_path + "\\" + p_reg_ex; + + intptr_t l_handle = _findfirst( l_file_pattern.c_str(), &l_file_info ); + //If folder_path exsist, using l_file_pattern will find at least two files "." and "..", + //of which "." means current dir and ".." means parent dir + if ( l_handle != -1 ) + { + //iteratively check each file or sub_directory in current folder + do + { + std::string l_file_name = l_file_info.name; //from char array to string + //check whtether it is a sub direcotry or a file + if ( l_file_info.attrib & _A_SUBDIR ) + { + if ( l_file_name != "." && l_file_name != ".." ) + wa::files::getFilenamesFromFolder( p_result, p_folder_path + "\\" + l_file_name, p_reg_ex ); + } + else + p_result.push_back( p_folder_path + "\\" + l_file_name ); + + } while ( _findnext( l_handle, &l_file_info ) == 0 && p_result.size() < p_limit - 1 ); + + + _findclose( l_handle ); + + return true; + } + + // + _findclose( l_handle ); + + return false; +} |