You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
Replace File/Directory with FileAccess/DirAccess
This commit is contained in:
@@ -36,6 +36,8 @@
|
||||
#include "core/os/os.h"
|
||||
#include "core/templates/local_vector.h"
|
||||
|
||||
thread_local Error DirAccess::last_dir_open_error = OK;
|
||||
|
||||
String DirAccess::_get_root_path() const {
|
||||
switch (_access_type) {
|
||||
case ACCESS_RESOURCES:
|
||||
@@ -249,6 +251,16 @@ Ref<DirAccess> DirAccess::open(const String &p_path, Error *r_error) {
|
||||
return da;
|
||||
}
|
||||
|
||||
Ref<DirAccess> DirAccess::_open(const String &p_path) {
|
||||
Error err = OK;
|
||||
Ref<DirAccess> da = open(p_path, &err);
|
||||
last_dir_open_error = err;
|
||||
if (err) {
|
||||
return Ref<DirAccess>();
|
||||
}
|
||||
return da;
|
||||
}
|
||||
|
||||
Ref<DirAccess> DirAccess::create(AccessType p_access) {
|
||||
Ref<DirAccess> da = create_func[p_access] ? create_func[p_access]() : nullptr;
|
||||
if (da.is_valid()) {
|
||||
@@ -266,6 +278,10 @@ Ref<DirAccess> DirAccess::create(AccessType p_access) {
|
||||
return da;
|
||||
}
|
||||
|
||||
Error DirAccess::get_open_error() {
|
||||
return last_dir_open_error;
|
||||
}
|
||||
|
||||
String DirAccess::get_full_path(const String &p_path, AccessType p_access) {
|
||||
Ref<DirAccess> d = DirAccess::create(p_access);
|
||||
if (d.is_null()) {
|
||||
@@ -424,3 +440,84 @@ bool DirAccess::exists(String p_dir) {
|
||||
Ref<DirAccess> da = DirAccess::create_for_path(p_dir);
|
||||
return da->change_dir(p_dir) == OK;
|
||||
}
|
||||
|
||||
PackedStringArray DirAccess::get_files() {
|
||||
return _get_contents(false);
|
||||
}
|
||||
|
||||
PackedStringArray DirAccess::get_directories() {
|
||||
return _get_contents(true);
|
||||
}
|
||||
|
||||
PackedStringArray DirAccess::_get_contents(bool p_directories) {
|
||||
PackedStringArray ret;
|
||||
|
||||
list_dir_begin();
|
||||
String s = _get_next();
|
||||
while (!s.is_empty()) {
|
||||
if (current_is_dir() == p_directories) {
|
||||
ret.append(s);
|
||||
}
|
||||
s = _get_next();
|
||||
}
|
||||
|
||||
ret.sort();
|
||||
return ret;
|
||||
}
|
||||
|
||||
String DirAccess::_get_next() {
|
||||
String next = get_next();
|
||||
while (!next.is_empty() && ((!include_navigational && (next == "." || next == "..")) || (!include_hidden && current_is_hidden()))) {
|
||||
next = get_next();
|
||||
}
|
||||
return next;
|
||||
}
|
||||
|
||||
void DirAccess::set_include_navigational(bool p_enable) {
|
||||
include_navigational = p_enable;
|
||||
}
|
||||
|
||||
bool DirAccess::get_include_navigational() const {
|
||||
return include_navigational;
|
||||
}
|
||||
|
||||
void DirAccess::set_include_hidden(bool p_enable) {
|
||||
include_hidden = p_enable;
|
||||
}
|
||||
|
||||
bool DirAccess::get_include_hidden() const {
|
||||
return include_hidden;
|
||||
}
|
||||
|
||||
void DirAccess::_bind_methods() {
|
||||
ClassDB::bind_static_method("DirAccess", D_METHOD("open", "path"), &DirAccess::_open);
|
||||
ClassDB::bind_static_method("DirAccess", D_METHOD("get_open_error"), &DirAccess::get_open_error);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("list_dir_begin"), &DirAccess::list_dir_begin, DEFVAL(false), DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("get_next"), &DirAccess::_get_next);
|
||||
ClassDB::bind_method(D_METHOD("current_is_dir"), &DirAccess::current_is_dir);
|
||||
ClassDB::bind_method(D_METHOD("list_dir_end"), &DirAccess::list_dir_end);
|
||||
ClassDB::bind_method(D_METHOD("get_files"), &DirAccess::get_files);
|
||||
ClassDB::bind_method(D_METHOD("get_directories"), &DirAccess::get_directories);
|
||||
ClassDB::bind_method(D_METHOD("get_drive_count"), &DirAccess::get_drive_count);
|
||||
ClassDB::bind_method(D_METHOD("get_drive", "idx"), &DirAccess::get_drive);
|
||||
ClassDB::bind_method(D_METHOD("get_current_drive"), &DirAccess::get_current_drive);
|
||||
ClassDB::bind_method(D_METHOD("change_dir", "todir"), &DirAccess::change_dir);
|
||||
ClassDB::bind_method(D_METHOD("get_current_dir", "include_drive"), &DirAccess::get_current_dir, DEFVAL(true));
|
||||
ClassDB::bind_method(D_METHOD("make_dir", "path"), &DirAccess::make_dir);
|
||||
ClassDB::bind_method(D_METHOD("make_dir_recursive", "path"), &DirAccess::make_dir_recursive);
|
||||
ClassDB::bind_method(D_METHOD("file_exists", "path"), &DirAccess::file_exists);
|
||||
ClassDB::bind_method(D_METHOD("dir_exists", "path"), &DirAccess::dir_exists);
|
||||
ClassDB::bind_method(D_METHOD("get_space_left"), &DirAccess::get_space_left);
|
||||
ClassDB::bind_method(D_METHOD("copy", "from", "to", "chmod_flags"), &DirAccess::copy, DEFVAL(-1));
|
||||
ClassDB::bind_method(D_METHOD("rename", "from", "to"), &DirAccess::rename);
|
||||
ClassDB::bind_method(D_METHOD("remove", "path"), &DirAccess::remove);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_include_navigational", "enable"), &DirAccess::set_include_navigational);
|
||||
ClassDB::bind_method(D_METHOD("get_include_navigational"), &DirAccess::get_include_navigational);
|
||||
ClassDB::bind_method(D_METHOD("set_include_hidden", "enable"), &DirAccess::set_include_hidden);
|
||||
ClassDB::bind_method(D_METHOD("get_include_hidden"), &DirAccess::get_include_hidden);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "include_navigational"), "set_include_navigational", "get_include_navigational");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "include_hidden"), "set_include_hidden", "get_include_hidden");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user