Added File.get_path and File.get_path_absolute functions
This commit is contained in:
parent
b842369442
commit
a4e64c5454
|
@ -1535,6 +1535,17 @@ bool _File::is_open() const {
|
||||||
|
|
||||||
return f != NULL;
|
return f != NULL;
|
||||||
}
|
}
|
||||||
|
String _File::get_path() const {
|
||||||
|
|
||||||
|
ERR_FAIL_COND_V(!f, "");
|
||||||
|
return f->get_path();
|
||||||
|
}
|
||||||
|
|
||||||
|
String _File::get_path_absolute() const {
|
||||||
|
|
||||||
|
ERR_FAIL_COND_V(!f, "");
|
||||||
|
return f->get_path_absolute();
|
||||||
|
}
|
||||||
|
|
||||||
void _File::seek(int64_t p_position) {
|
void _File::seek(int64_t p_position) {
|
||||||
|
|
||||||
|
@ -1824,6 +1835,8 @@ void _File::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("open", "path", "flags"), &_File::open);
|
ClassDB::bind_method(D_METHOD("open", "path", "flags"), &_File::open);
|
||||||
ClassDB::bind_method(D_METHOD("close"), &_File::close);
|
ClassDB::bind_method(D_METHOD("close"), &_File::close);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_path"), &_File::get_path);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_path_absolute"), &_File::get_path_absolute);
|
||||||
ClassDB::bind_method(D_METHOD("is_open"), &_File::is_open);
|
ClassDB::bind_method(D_METHOD("is_open"), &_File::is_open);
|
||||||
ClassDB::bind_method(D_METHOD("seek", "position"), &_File::seek);
|
ClassDB::bind_method(D_METHOD("seek", "position"), &_File::seek);
|
||||||
ClassDB::bind_method(D_METHOD("seek_end", "position"), &_File::seek_end, DEFVAL(0));
|
ClassDB::bind_method(D_METHOD("seek_end", "position"), &_File::seek_end, DEFVAL(0));
|
||||||
|
|
|
@ -415,6 +415,9 @@ public:
|
||||||
void close(); ///< close a file
|
void close(); ///< close a file
|
||||||
bool is_open() const; ///< true when file is open
|
bool is_open() const; ///< true when file is open
|
||||||
|
|
||||||
|
String get_path() const; /// returns the path for the current open file
|
||||||
|
String get_path_absolute() const; /// returns the absolute path for the current open file
|
||||||
|
|
||||||
void seek(int64_t p_position); ///< seek to a given position
|
void seek(int64_t p_position); ///< seek to a given position
|
||||||
void seek_end(int64_t p_position = 0); ///< seek from the end of file
|
void seek_end(int64_t p_position = 0); ///< seek from the end of file
|
||||||
int64_t get_position() const; ///< get position in the file
|
int64_t get_position() const; ///< get position in the file
|
||||||
|
|
|
@ -89,6 +89,9 @@ public:
|
||||||
virtual void close() = 0; ///< close a file
|
virtual void close() = 0; ///< close a file
|
||||||
virtual bool is_open() const = 0; ///< true when file is open
|
virtual bool is_open() const = 0; ///< true when file is open
|
||||||
|
|
||||||
|
virtual String get_path() const { return ""; } /// returns the path for the current open file
|
||||||
|
virtual String get_path_absolute() const { return ""; } /// returns the absolute path for the current open file
|
||||||
|
|
||||||
virtual void seek(size_t p_position) = 0; ///< seek to a given position
|
virtual void seek(size_t p_position) = 0; ///< seek to a given position
|
||||||
virtual void seek_end(int64_t p_position = 0) = 0; ///< seek from the end of file
|
virtual void seek_end(int64_t p_position = 0) = 0; ///< seek from the end of file
|
||||||
virtual size_t get_position() const = 0; ///< get position in the file
|
virtual size_t get_position() const = 0; ///< get position in the file
|
||||||
|
|
|
@ -163,6 +163,20 @@
|
||||||
Returns a [String] saved in Pascal format from the file.
|
Returns a [String] saved in Pascal format from the file.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="get_path">
|
||||||
|
<return type="String">
|
||||||
|
</return>
|
||||||
|
<description>
|
||||||
|
Returns the path as a [String] for the current open file.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="get_path_absolute">
|
||||||
|
<return type="String">
|
||||||
|
</return>
|
||||||
|
<description>
|
||||||
|
Returns the absolute path as a [String] for the current open file.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="get_position" qualifiers="const">
|
<method name="get_position" qualifiers="const">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
|
|
|
@ -69,6 +69,7 @@ Error FileAccessUnix::_open(const String &p_path, int p_mode_flags) {
|
||||||
fclose(f);
|
fclose(f);
|
||||||
f = NULL;
|
f = NULL;
|
||||||
|
|
||||||
|
path_src = p_path;
|
||||||
path = fix_path(p_path);
|
path = fix_path(p_path);
|
||||||
//printf("opening %ls, %i\n", path.c_str(), Memory::get_static_mem_usage());
|
//printf("opening %ls, %i\n", path.c_str(), Memory::get_static_mem_usage());
|
||||||
|
|
||||||
|
@ -152,6 +153,16 @@ bool FileAccessUnix::is_open() const {
|
||||||
return (f != NULL);
|
return (f != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String FileAccessUnix::get_path() const {
|
||||||
|
|
||||||
|
return path_src;
|
||||||
|
}
|
||||||
|
|
||||||
|
String FileAccessUnix::get_path_absolute() const {
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
void FileAccessUnix::seek(size_t p_position) {
|
void FileAccessUnix::seek(size_t p_position) {
|
||||||
|
|
||||||
ERR_FAIL_COND(!f);
|
ERR_FAIL_COND(!f);
|
||||||
|
|
|
@ -51,6 +51,7 @@ class FileAccessUnix : public FileAccess {
|
||||||
mutable Error last_error;
|
mutable Error last_error;
|
||||||
String save_path;
|
String save_path;
|
||||||
String path;
|
String path;
|
||||||
|
String path_src;
|
||||||
|
|
||||||
static FileAccess *create_libc();
|
static FileAccess *create_libc();
|
||||||
|
|
||||||
|
@ -61,6 +62,9 @@ public:
|
||||||
virtual void close(); ///< close a file
|
virtual void close(); ///< close a file
|
||||||
virtual bool is_open() const; ///< true when file is open
|
virtual bool is_open() const; ///< true when file is open
|
||||||
|
|
||||||
|
virtual String get_path() const; /// returns the path for the current open file
|
||||||
|
virtual String get_path_absolute() const; /// returns the absolute path for the current open file
|
||||||
|
|
||||||
virtual void seek(size_t p_position); ///< seek to a given position
|
virtual void seek(size_t p_position); ///< seek to a given position
|
||||||
virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file
|
virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file
|
||||||
virtual size_t get_position() const; ///< get position in the file
|
virtual size_t get_position() const; ///< get position in the file
|
||||||
|
|
|
@ -57,7 +57,8 @@ void FileAccessWindows::check_errors() const {
|
||||||
|
|
||||||
Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) {
|
Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) {
|
||||||
|
|
||||||
String filename = fix_path(p_path);
|
path_src = p_path;
|
||||||
|
path = fix_path(p_path);
|
||||||
if (f)
|
if (f)
|
||||||
close();
|
close();
|
||||||
|
|
||||||
|
@ -78,19 +79,19 @@ Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) {
|
||||||
backend supports utf8 encoding */
|
backend supports utf8 encoding */
|
||||||
|
|
||||||
struct _stat st;
|
struct _stat st;
|
||||||
if (_wstat(filename.c_str(), &st) == 0) {
|
if (_wstat(path.c_str(), &st) == 0) {
|
||||||
|
|
||||||
if (!S_ISREG(st.st_mode))
|
if (!S_ISREG(st.st_mode))
|
||||||
return ERR_FILE_CANT_OPEN;
|
return ERR_FILE_CANT_OPEN;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (is_backup_save_enabled() && p_mode_flags & WRITE && !(p_mode_flags & READ)) {
|
if (is_backup_save_enabled() && p_mode_flags & WRITE && !(p_mode_flags & READ)) {
|
||||||
save_path = filename;
|
save_path = path;
|
||||||
filename = filename + ".tmp";
|
path = path + ".tmp";
|
||||||
//print_line("saving instead to "+path);
|
//print_line("saving instead to "+path);
|
||||||
}
|
}
|
||||||
|
|
||||||
f = _wfopen(filename.c_str(), mode_string);
|
f = _wfopen(path.c_str(), mode_string);
|
||||||
|
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
last_error = ERR_FILE_CANT_OPEN;
|
last_error = ERR_FILE_CANT_OPEN;
|
||||||
|
@ -154,6 +155,17 @@ void FileAccessWindows::close() {
|
||||||
ERR_FAIL_COND(rename_error);
|
ERR_FAIL_COND(rename_error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String FileAccessWindows::get_path() const {
|
||||||
|
|
||||||
|
return path_src;
|
||||||
|
}
|
||||||
|
|
||||||
|
String FileAccessWindows::get_path_absolute() const {
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
bool FileAccessWindows::is_open() const {
|
bool FileAccessWindows::is_open() const {
|
||||||
|
|
||||||
return (f != NULL);
|
return (f != NULL);
|
||||||
|
|
|
@ -46,6 +46,8 @@ class FileAccessWindows : public FileAccess {
|
||||||
int flags;
|
int flags;
|
||||||
void check_errors() const;
|
void check_errors() const;
|
||||||
mutable Error last_error;
|
mutable Error last_error;
|
||||||
|
String path;
|
||||||
|
String path_src;
|
||||||
String save_path;
|
String save_path;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -53,6 +55,9 @@ public:
|
||||||
virtual void close(); ///< close a file
|
virtual void close(); ///< close a file
|
||||||
virtual bool is_open() const; ///< true when file is open
|
virtual bool is_open() const; ///< true when file is open
|
||||||
|
|
||||||
|
virtual String get_path() const; /// returns the path for the current open file
|
||||||
|
virtual String get_path_absolute() const; /// returns the absolute path for the current open file
|
||||||
|
|
||||||
virtual void seek(size_t p_position); ///< seek to a given position
|
virtual void seek(size_t p_position); ///< seek to a given position
|
||||||
virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file
|
virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file
|
||||||
virtual size_t get_position() const; ///< get position in the file
|
virtual size_t get_position() const; ///< get position in the file
|
||||||
|
|
Loading…
Reference in New Issue