Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

FileAccess

Inherits: RefCounted < Object

Type to handle file reading and writing operations.

Description

File type. This is used to permanently store data into the user device's file system and to read from it. This can be used to store game save data or player configuration files, for example.

Here's a sample on how to write and read from a file:

func save(content):
    var file = FileAccess.open("user://save_game.dat", FileAccess.WRITE)
    file.store_string(content)

func load():
    var file = FileAccess.open("user://save_game.dat", FileAccess.READ)
    var content = file.get_as_text()
    return content

In the example above, the file will be saved in the user data folder as specified in the Data paths documentation.

FileAccess will close when it's freed, which happens when it goes out of scope or when it gets assigned with null. In C# the reference must be disposed after we are done using it, this can be done with the using statement or calling the Dispose method directly.

var file = FileAccess.open("res://something") # File is opened and locked for use.
file = null # File is closed.

Note: To access project resources once exported, it is recommended to use ResourceLoader instead of the FileAccess API, as some files are converted to engine-specific formats and their original source files might not be present in the exported PCK package.

Note: Files are automatically closed only if the process exits "normally" (such as by clicking the window manager's close button or pressing Alt + F4). If you stop the project execution by pressing F8 while the project is running, the file won't be closed as the game process will be killed. You can work around this by calling flush at regular intervals.

Tutorials

Properties

bool

big_endian

Methods

void

close ( )

bool

eof_reached ( ) const

bool

file_exists ( String path ) static

void

flush ( )

int

get_8 ( ) const

int

get_16 ( ) const

int

get_32 ( ) const

int

get_64 ( ) const

String

get_as_text ( bool skip_cr=false ) const

PackedByteArray

get_buffer ( int length ) const

PackedStringArray

get_csv_line ( String delim="," ) const

float

get_double ( ) const

Error

get_error ( ) const

PackedByteArray

get_file_as_bytes ( String path ) static

String

get_file_as_string ( String path ) static

float

get_float ( ) const

int

get_length ( ) const

String

get_line ( ) const

String

get_md5 ( String path ) static

int

get_modified_time ( String file ) static

Error

get_open_error ( ) static

String

get_pascal_string ( )

String

get_path ( ) const

String

get_path_absolute ( ) const

int

get_position ( ) const

float

get_real ( ) const

String

get_sha256 ( String path ) static

Variant

get_var ( bool allow_objects=false ) const

bool

is_open ( ) const

FileAccess

open ( String path, ModeFlags flags ) static

FileAccess

open_compressed ( String path, ModeFlags mode_flags, CompressionMode compression_mode=0 ) static

FileAccess

open_encrypted ( String path, ModeFlags mode_flags, PackedByteArray key ) static

FileAccess

open_encrypted_with_pass ( String path, ModeFlags mode_flags, String pass ) static

void

seek ( int position )

void

seek_end ( int position=0 )

void

store_8 ( int value )

void

store_16 ( int value )

void

store_32 ( int value )

void

store_64 ( int value )

void

store_buffer ( PackedByteArray buffer )

void

store_csv_line ( PackedStringArray values, String delim="," )

void

store_double ( float value )

void

store_float ( float value )

void

store_line ( String line )

void

store_pascal_string ( String string )

void

store_real ( float value )

void

store_string ( String string )

void

store_var ( Variant value, bool full_objects=false )


Enumerations

enum ModeFlags:

ModeFlags READ = 1

Opens the file for read operations. The cursor is positioned at the beginning of the file.

ModeFlags WRITE = 2

Opens the file for write operations. The file is created if it does not exist, and truncated if it does.

ModeFlags READ_WRITE = 3

Opens the file for read and write operations. Does not truncate the file. The cursor is positioned at the beginning of the file.

ModeFlags WRITE_READ = 7

Opens the file for read and write operations. The file is created if it does not exist, and truncated if it does. The cursor is positioned at the beginning of the file.


enum CompressionMode:

CompressionMode COMPRESSION_FASTLZ = 0

Uses the FastLZ compression method.

CompressionMode COMPRESSION_DEFLATE = 1

Uses the DEFLATE compression method.

CompressionMode COMPRESSION_ZSTD = 2

Uses the Zstandard compression method.

CompressionMode COMPRESSION_GZIP = 3

Uses the gzip compression method.

CompressionMode COMPRESSION_BROTLI = 4

Uses the brotli compression method (only decompression is supported).


Property Descriptions

bool big_endian

  • void set_big_endian ( bool value )

  • bool is_big_endian ( )

If true, the file is read with big-endian endianness. If false, the file is read with little-endian endianness. If in doubt, leave this to false as most files are written with little-endian endianness.

Note: big_endian is only about the file format, not the CPU type. The CPU endianness doesn't affect the default endianness for files written.

Note: This is always reset to false whenever you open the file. Therefore, you must set big_endian after opening the file, not before.


Method Descriptions

void close ( )

Closes the currently opened file and prevents subsequent read/write operations. Use flush to persist the data to disk without closing the file.

Note: FileAccess will automatically close when it's freed, which happens when it goes out of scope or when it gets assigned with null. In C# the reference must be disposed after we are done using it, this can be done with the using statement or calling the Dispose method directly.


bool eof_reached ( ) const

Returns true if the file cursor has already read past the end of the file.

Note: eof_reached() == false cannot be used to check whether there is more data available. To loop while there is more data available, use:

while file.get_position() < file.get_length():
    # Read data

bool file_exists ( String path ) static

Returns true if the file exists in the given path.

Note: Many resources types are imported (e.g. textures or sound files), and their source asset will not be included in the exported game, as only the imported version is used. See ResourceLoader.exists for an alternative approach that takes resource remapping into account.

For a non-static, relative equivalent, use DirAccess.file_exists.


void flush ( )

Writes the file's buffer to disk. Flushing is automatically performed when the file is closed. This means you don't need to call flush manually before closing a file. Still, calling flush can be used to ensure the data is safe even if the project crashes instead of being closed gracefully.

Note: Only call flush when you actually need it. Otherwise, it will decrease performance due to constant disk writes.


int get_8 ( ) const

Returns the next 8 bits from the file as an integer. See store_8 for details on what values can be stored and retrieved this way.