Merge pull request #459 from marynate/PR-diracccess-dir-exists

Add DirAccess:dir_exist api
This commit is contained in:
reduz 2014-06-11 01:19:39 -03:00
commit bb0dd1c5f9
13 changed files with 118 additions and 2 deletions

View file

@ -81,6 +81,26 @@ bool DirAccessUnix::file_exists(String p_file) {
}
bool DirAccessUnix::dir_exists(String p_dir) {
GLOBAL_LOCK_FUNCTION
if (p_dir.is_rel_path())
p_dir=current_dir+"/"+p_dir;
else
p_dir=fix_path(p_dir);
struct stat flags;
bool success = (stat(p_dir.utf8().get_data(),&flags)==0);
if (success && S_ISDIR(flags.st_mode))
return true;
return false;
}
uint64_t DirAccessUnix::get_modified_time(String p_file) {
if (p_file.is_rel_path())

View file

@ -66,7 +66,9 @@ public:
virtual String get_current_dir(); ///< return current dir location
virtual Error make_dir(String p_dir);
virtual bool file_exists(String p_file);
virtual bool file_exists(String p_file);
virtual bool dir_exists(String p_dir);
virtual uint64_t get_modified_time(String p_file);

View file

@ -303,6 +303,39 @@ bool DirAccessWindows::file_exists(String p_file) {
return false;
}
bool DirAccessWindows::dir_exists(String p_dir) {
GLOBAL_LOCK_FUNCTION
if (!p_dir.is_abs_path())
p_dir=get_current_dir()+"/"+p_dir;
p_dir=fix_path(p_dir);
p_dir.replace("/","\\");
if (unicode) {
DWORD fileAttr;
fileAttr = GetFileAttributesW(p_dir.c_str());
if (0xFFFFFFFF == fileAttr)
return false;
return (fileAttr&FILE_ATTRIBUTE_DIRECTORY);
} else {
DWORD fileAttr;
fileAttr = GetFileAttributesA(p_dir.ascii().get_data());
if (0xFFFFFFFF == fileAttr)
return false;
return (fileAttr&FILE_ATTRIBUTE_DIRECTORY);
}
return false;
}
Error DirAccessWindows::rename(String p_path,String p_new_path) {
p_path=fix_path(p_path);

View file

@ -74,6 +74,7 @@ public:
virtual bool file_exists(String p_file);
virtual bool dir_exists(String p_dir);
virtual Error make_dir(String p_dir);