aboutsummaryrefslogtreecommitdiff
path: root/Src/WAT/wa_files.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/WAT/wa_files.cpp')
-rw-r--r--Src/WAT/wa_files.cpp94
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;
+}