VirtualFileSystem
from panda3d.core import VirtualFileSystem
- class VirtualFileSystem
Bases:
A hierarchy of directories and files that appears to be one continuous file system, even though the files may originate from several different sources that may not be related to the actual OS’s file system.
For instance, a VirtualFileSystem can transparently mount one or more Multifiles as their own subdirectory hierarchies.
Inheritance diagram
- __init__()
- chdir(new_directory: Filename) bool
Changes the current directory. This is used to resolve relative pathnames in
getFile()
and/orfindFile()
. Returns true if successful, false otherwise.
- static closeReadFile(stream: istream)
Closes a file opened by a previous call to
openReadFile()
. This really just deletes the istream pointer, but it is recommended to use this interface instead of deleting it explicitly, to help work around compiler issues.
- static closeReadWriteFile(stream: iostream)
Closes a file opened by a previous call to
openReadWriteFile()
. This really just deletes the iostream pointer, but it is recommended to use this interface instead of deleting it explicitly, to help work around compiler issues.
- static closeWriteFile(stream: ostream)
Closes a file opened by a previous call to
openWriteFile()
. This really just deletes the ostream pointer, but it is recommended to use this interface instead of deleting it explicitly, to help work around compiler issues.
- copyFile(orig_filename: Filename, new_filename: Filename) bool
Attempts to copy the contents of the indicated file to the indicated file. Returns true on success, false on failure.
- createFile(filename: Filename) VirtualFile
Attempts to create a file by the indicated name in the filesystem, if possible, and returns it. If a file by this name already exists, returns the same thing as
getFile()
. If the filename is located within a read- only directory, or the directory doesn’t exist, returns NULL.
- deleteFile(filename: Filename) bool
Attempts to delete the indicated file or directory. This can remove a single file or an empty directory. It will not remove a nonempty directory. Returns true on success, false on failure.
- exists(filename: Filename) bool
Convenience function; returns true if the named file exists in the virtual file system hierarchy.
- findAllFiles(filename: Filename, searchpath: DSearchPath, results: Results) int
Searches all the directories in the search list for the indicated file, in order. Fills up the results list with all of the matching filenames found, if any. Returns the number of matches found.
It is the responsibility of the the caller to clear the results list first; otherwise, the newly-found files will be appended to the list.
- findFile(filename: Filename, searchpath: DSearchPath, status_only: bool) VirtualFile
Uses the indicated search path to find the file within the file system. Returns the first occurrence of the file found, or NULL if the file cannot be found.
- getFile(filename: Filename, status_only: bool) VirtualFile
Looks up the file by the indicated name in the file system. Returns a
VirtualFile
pointer representing the file if it is found, or NULL if it is not.If status_only is true, the file will be checked for existence and length and so on, but the returned file’s contents cannot be read. This is an optimization which is especially important for certain mount types, for instance HTTP, for which opening a file to determine its status is substantially less expensive than opening it to read its contents.
- static getGlobalPtr() VirtualFileSystem
Returns the default global
VirtualFileSystem
. You may create your own personalVirtualFileSystem
objects and use them for whatever you like, but Panda will attempt to load models and stuff from this default object.Initially, the global
VirtualFileSystem
is set up to mount the OS filesystem to root; i.e. it is equivalent to the OS filesystem. This may be subsequently adjusted by the user.
- getMount(n: int) VirtualFileMount
Returns the nth mount in the system.
- isDirectory(filename: Filename) bool
Convenience function; returns true if the named file exists as a directory in the virtual file system hierarchy.
- isRegularFile(filename: Filename) bool
Convenience function; returns true if the named file exists as a regular file in the virtual file system hierarchy.
- lsAll(filename: Filename)
Convenience function; lists the files within the indicated directory, and all files below, recursively.
- makeDirectory(filename: Filename) bool
Attempts to create a directory within the file system. Returns true on success, false on failure (for instance, because the parent directory does not exist, or is read-only). If the directory already existed prior to this call, returns true.
- makeDirectoryFull(filename: Filename) bool
Attempts to create a directory within the file system. Will also create any intervening directories needed. Returns true on success, false on failure.
- mount(physical_filename: Filename, mount_point: Filename, flags: int, password: str) bool
Mounts the indicated system file or directory at the given mount point. If the named file is a directory, mounts the directory. If the named file is a Multifile, mounts it as a Multifile. Returns true on success, false on failure.
A given system directory may be mounted to multiple different mount point, and the same mount point may share multiple system directories. In the case of ambiguities (that is, two different files with exactly the same full pathname), the most-recently mounted system wins.
The filename specified as the first parameter must refer to a real, physical filename on disk; it cannot be a virtual file already appearing within the vfs filespace. However, it is possible to mount such a file; see
mountLoop()
for this.Note that a mounted
VirtualFileSystem
directory is fully case-sensitive, unlike the native Windows file system, so you must refer to files within the virtual file system with exactly the right case.
- mount(multifile: Multifile, mount_point: Filename, flags: int) bool
Mounts the indicated Multifile at the given mount point.
- mount(mount: VirtualFileMount, mount_point: Filename, flags: int) bool
Adds the given
VirtualFileMount
object to the mount list. This is a lower- level function than the other flavors of mount(); it requires you to create aVirtualFileMount
object specifically.
- mountLoop(virtual_filename: Filename, mount_point: Filename, flags: int, password: str) bool
This is similar to
mount()
, but it receives the name of a Multifile that already appears within the virtual file system. It can be used to mount a Multifile that is itself hosted within a virtually-mounted Multifile.This interface can also be used to mount physical files (that appear within the virtual filespace), but it cannot be used to mount directories. Use
mount()
if you need to mount a directory.Note that there is additional overhead, in the form of additional buffer copies of the data, for recursively mounting a multifile like this.
- property mounts Sequence[PointerTo_VirtualFileMount]
Returns the nth mount in the system.
- openAppendFile(filename: Filename) ostream
Works like
openWriteFile()
, but the file is opened in append mode. LikeopenWriteFile()
, the returned pointer should eventually be passed tocloseWriteFile()
.
- openReadAppendFile(filename: Filename) iostream
Works like
openReadWriteFile()
, but the file is opened in append mode. LikeopenReadWriteFile()
, the returned pointer should eventually be passed tocloseReadWriteFile()
.
- openReadFile(filename: Filename, auto_unwrap: bool) istream
Convenience function; returns a newly allocated istream if the file exists and can be read, or NULL otherwise. Does not return an invalid istream.
If auto_unwrap is true, an explicitly-named .pz file is automatically decompressed and the decompressed contents are returned. This is different than vfs-implicit-pz, which will automatically decompress a file if the extension .pz is not given.
- openReadWriteFile(filename: Filename, truncate: bool) iostream
Convenience function; returns a newly allocated iostream if the file exists and can be written, or NULL otherwise. Does not return an invalid iostream.
- openWriteFile(filename: Filename, auto_wrap: bool, truncate: bool) ostream
Convenience function; returns a newly allocated ostream if the file exists and can be written, or NULL otherwise. Does not return an invalid ostream.
If auto_wrap is true, an explicitly-named .pz file is automatically compressed while writing. If truncate is true, the file is truncated to zero length before writing.
- readFile(filename: Filename, auto_unwrap: bool) object
Convenience function; returns the entire contents of the indicated file as a string.
If auto_unwrap is true, an explicitly-named .pz/.gz file is automatically decompressed and the decompressed contents are returned. This is different than vfs-implicit-pz, which will automatically decompress a file if the extension .pz is not given.
- renameFile(orig_filename: Filename, new_filename: Filename) bool
Attempts to move or rename the indicated file or directory. If the original file is an ordinary file, it will quietly replace any already- existing file in the new filename (but not a directory). If the original file is a directory, the new filename must not already exist.
If the file is a directory, the new filename must be within the same mount point. If the file is an ordinary file, the new filename may be anywhere; but if it is not within the same mount point then the rename operation is automatically performed as a two-step copy-and-delete operation.
- resolveFilename(filename: Filename, searchpath: DSearchPath, default_extension: str) bool
Searches the given search path for the filename. If it is found, updates the filename to the full pathname found and returns true; otherwise, returns false.
- scanDirectory(filename: Filename) VirtualFileList
If the file represents a directory (that is,
isDirectory()
returns true), this returns the list of files within the directory at the current time. Returns NULL if the file is not a directory or if the directory cannot be read.
- unmount(physical_filename: Filename) int
Unmounts all appearances of the indicated directory name or multifile name from the file system. Returns the number of appearances unmounted.
- unmount(multifile: Multifile) int
Unmounts all appearances of the indicated Multifile from the file system. Returns the number of appearances unmounted.
- unmount(mount: VirtualFileMount) int
Unmounts the indicated
VirtualFileMount
object from the file system. Returns the number of appearances unmounted.
- unmountAll() int
Unmounts all files from the file system. Returns the number of systems unmounted.