Merge pull request #459 from marynate/PR-diracccess-dir-exists
Add DirAccess:dir_exist api
This commit is contained in:
commit
bb0dd1c5f9
13 changed files with 118 additions and 2 deletions
|
@ -1347,6 +1347,10 @@ bool _Directory::file_exists(String p_file){
|
|||
return d->file_exists(p_file);
|
||||
}
|
||||
|
||||
bool _Directory::dir_exists(String p_dir) {
|
||||
ERR_FAIL_COND_V(!d,false);
|
||||
return d->dir_exists(p_dir);
|
||||
}
|
||||
|
||||
int _Directory::get_space_left(){
|
||||
|
||||
|
@ -1386,6 +1390,7 @@ void _Directory::_bind_methods() {
|
|||
ObjectTypeDB::bind_method(_MD("make_dir:Error","name"),&_Directory::make_dir);
|
||||
ObjectTypeDB::bind_method(_MD("make_dir_recursive:Error","name"),&_Directory::make_dir_recursive);
|
||||
ObjectTypeDB::bind_method(_MD("file_exists","name"),&_Directory::file_exists);
|
||||
ObjectTypeDB::bind_method(_MD("dir_exists","name"),&_Directory::dir_exists);
|
||||
// ObjectTypeDB::bind_method(_MD("get_modified_time","file"),&_Directory::get_modified_time);
|
||||
ObjectTypeDB::bind_method(_MD("get_space_left"),&_Directory::get_space_left);
|
||||
ObjectTypeDB::bind_method(_MD("copy:Error","from","to"),&_Directory::copy);
|
||||
|
|
|
@ -350,6 +350,7 @@ public:
|
|||
Error make_dir_recursive(String p_dir);
|
||||
|
||||
bool file_exists(String p_file);
|
||||
bool dir_exists(String p_dir);
|
||||
|
||||
int get_space_left();
|
||||
|
||||
|
|
|
@ -443,6 +443,11 @@ bool DirAccessPack::file_exists(String p_file){
|
|||
return current->files.has(p_file);
|
||||
}
|
||||
|
||||
bool DirAccessPack::dir_exists(String p_dir) {
|
||||
|
||||
return current->subdirs.has(p_dir);
|
||||
}
|
||||
|
||||
Error DirAccessPack::make_dir(String p_dir){
|
||||
|
||||
return ERR_UNAVAILABLE;
|
||||
|
|
|
@ -190,6 +190,7 @@ public:
|
|||
|
||||
|
||||
virtual bool file_exists(String p_file);
|
||||
virtual bool dir_exists(String p_dir);
|
||||
|
||||
virtual Error make_dir(String p_dir);
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ public:
|
|||
virtual Error erase_contents_recursive(); //super dangerous, use with care!
|
||||
|
||||
virtual bool file_exists(String p_file)=0;
|
||||
|
||||
virtual bool dir_exists(String p_dir)=0;
|
||||
|
||||
virtual size_t get_space_left()=0;
|
||||
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -179,6 +179,32 @@ bool DirAccessJAndroid::file_exists(String p_file){
|
|||
return exists;
|
||||
}
|
||||
|
||||
bool DirAccessJAndroid::dir_exists(String p_dir) {
|
||||
|
||||
JNIEnv *env = ThreadAndroid::get_env();
|
||||
|
||||
String sd;
|
||||
if (current_dir=="")
|
||||
sd=p_dir;
|
||||
else
|
||||
sd=current_dir+"/"+p_dir;
|
||||
|
||||
String path=fix_path(sd).simplify_path();
|
||||
if (path.begins_with("/"))
|
||||
path=path.substr(1,path.length());
|
||||
else if (path.begins_with("res://"))
|
||||
path=path.substr(6,path.length());
|
||||
|
||||
jstring js = env->NewStringUTF(path.utf8().get_data());
|
||||
int res = env->CallIntMethod(io,_dir_open,js);
|
||||
if (res<=0)
|
||||
return false;
|
||||
|
||||
env->CallVoidMethod(io,_dir_close,res);
|
||||
env->DeleteLocalRef(js);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Error DirAccessJAndroid::make_dir(String p_dir){
|
||||
|
||||
|
|
|
@ -70,6 +70,7 @@ public:
|
|||
|
||||
|
||||
virtual bool file_exists(String p_file);
|
||||
virtual bool dir_exists(String p_dir);
|
||||
|
||||
virtual Error make_dir(String p_dir);
|
||||
|
||||
|
|
|
@ -156,6 +156,26 @@ bool DirAccessFlash::file_exists(String p_file) {
|
|||
return success;
|
||||
};
|
||||
|
||||
bool DirAccessFlash::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;
|
||||
};
|
||||
|
||||
size_t DirAccessFlash::get_space_left() {
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -45,6 +45,7 @@ public:
|
|||
Error make_dir(String p_dir);
|
||||
|
||||
bool file_exists(String p_file);
|
||||
bool dir_exists(String p_dir);
|
||||
|
||||
size_t get_space_left();
|
||||
|
||||
|
|
Loading…
Reference in a new issue