pub struct Dir { /* private fields */ }
Expand description
A reference to an open directory on a filesystem.
This does not directly correspond to anything in std
, however its methods
correspond to the functions in std::fs
and the constructor methods for
std::fs::File
.
Unlike std::fs
, this API’s canonicalize
returns a relative path since
absolute paths don’t interoperate well with the capability model.
Implementations§
source§impl Dir
impl Dir
sourcepub fn from_std_file(std_file: File) -> Self
pub fn from_std_file(std_file: File) -> Self
Constructs a new instance of Self
from the given std::fs::File
.
To prevent race conditions on Windows, the file must be opened without
FILE_SHARE_DELETE
.
This grants access the resources the std::fs::File
instance already
has access to.
sourcepub fn into_std_file(self) -> File
pub fn into_std_file(self) -> File
Consumes self
and returns a std::fs::File
.
sourcepub fn open<P: AsRef<Path>>(&self, path: P) -> Result<File>
pub fn open<P: AsRef<Path>>(&self, path: P) -> Result<File>
Attempts to open a file in read-only mode.
This corresponds to std::fs::File::open
, but only accesses paths
relative to self
.
sourcepub fn open_with<P: AsRef<Path>>(
&self,
path: P,
options: &OpenOptions
) -> Result<File>
pub fn open_with<P: AsRef<Path>>( &self, path: P, options: &OpenOptions ) -> Result<File>
Opens a file at path
with the options specified by options
.
This corresponds to std::fs::OpenOptions::open
.
Instead of being a method on OpenOptions
, this is a method on Dir
,
and it only accesses paths relative to self
.
sourcepub fn create_dir<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn create_dir<P: AsRef<Path>>(&self, path: P) -> Result<()>
Creates a new, empty directory at the provided path.
This corresponds to std::fs::create_dir
, but only accesses paths
relative to self
.
sourcepub fn create_dir_all<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn create_dir_all<P: AsRef<Path>>(&self, path: P) -> Result<()>
Recursively create a directory and all of its parent components if they are missing.
This corresponds to std::fs::create_dir_all
, but only accesses
paths relative to self
.
sourcepub fn create_dir_with<P: AsRef<Path>>(
&self,
path: P,
dir_builder: &DirBuilder
) -> Result<()>
Available on non-WASI only.
pub fn create_dir_with<P: AsRef<Path>>( &self, path: P, dir_builder: &DirBuilder ) -> Result<()>
Creates the specified directory with the options configured in this builder.
This corresponds to std::fs::DirBuilder::create
.
sourcepub fn create<P: AsRef<Path>>(&self, path: P) -> Result<File>
pub fn create<P: AsRef<Path>>(&self, path: P) -> Result<File>
Opens a file in write-only mode.
This corresponds to std::fs::File::create
, but only accesses paths
relative to self
.
sourcepub fn canonicalize<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
pub fn canonicalize<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
Returns the canonical form of a path with all intermediate components normalized and symbolic links resolved.
This corresponds to std::fs::canonicalize
, but instead of returning
an absolute path, returns a path relative to the directory
represented by self
.
sourcepub fn copy<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
from: P,
to_dir: &Self,
to: Q
) -> Result<u64>
pub fn copy<P: AsRef<Path>, Q: AsRef<Path>>( &self, from: P, to_dir: &Self, to: Q ) -> Result<u64>
Copies the contents of one file to another. This function will also copy the permission bits of the original file to the destination file.
This corresponds to std::fs::copy
, but only accesses paths
relative to self
.
sourcepub fn hard_link<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
src: P,
dst_dir: &Self,
dst: Q
) -> Result<()>
pub fn hard_link<P: AsRef<Path>, Q: AsRef<Path>>( &self, src: P, dst_dir: &Self, dst: Q ) -> Result<()>
Creates a new hard link on a filesystem.
This corresponds to std::fs::hard_link
, but only accesses paths
relative to self
.
sourcepub fn metadata<P: AsRef<Path>>(&self, path: P) -> Result<Metadata>
pub fn metadata<P: AsRef<Path>>(&self, path: P) -> Result<Metadata>
Given a path, query the file system to get information about a file, directory, etc.
This corresponds to std::fs::metadata
, but only accesses paths
relative to self
.
sourcepub fn dir_metadata(&self) -> Result<Metadata>
pub fn dir_metadata(&self) -> Result<Metadata>
Queries metadata about the underlying directory.
This is similar to std::fs::File::metadata
, but for Dir
rather
than for File
.
sourcepub fn read_dir<P: AsRef<Path>>(&self, path: P) -> Result<ReadDir>
pub fn read_dir<P: AsRef<Path>>(&self, path: P) -> Result<ReadDir>
Returns an iterator over the entries within a directory.
This corresponds to std::fs::read_dir
, but only accesses paths
relative to self
.
sourcepub fn read<P: AsRef<Path>>(&self, path: P) -> Result<Vec<u8>>
pub fn read<P: AsRef<Path>>(&self, path: P) -> Result<Vec<u8>>
Read the entire contents of a file into a bytes vector.
This corresponds to std::fs::read
, but only accesses paths
relative to self
.
sourcepub fn read_link<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
pub fn read_link<P: AsRef<Path>>(&self, path: P) -> Result<PathBuf>
Reads a symbolic link, returning the file that the link points to.
This corresponds to std::fs::read_link
, but only accesses paths
relative to self
.
sourcepub fn read_to_string<P: AsRef<Path>>(&self, path: P) -> Result<String>
pub fn read_to_string<P: AsRef<Path>>(&self, path: P) -> Result<String>
Read the entire contents of a file into a string.
This corresponds to std::fs::read_to_string
, but only accesses
paths relative to self
.
sourcepub fn remove_dir<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn remove_dir<P: AsRef<Path>>(&self, path: P) -> Result<()>
Removes an empty directory.
This corresponds to std::fs::remove_dir
, but only accesses paths
relative to self
.
sourcepub fn remove_dir_all<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn remove_dir_all<P: AsRef<Path>>(&self, path: P) -> Result<()>
Removes a directory at this path, after removing all its contents. Use carefully!
This corresponds to std::fs::remove_dir_all
, but only accesses
paths relative to self
.
sourcepub fn remove_open_dir(self) -> Result<()>
pub fn remove_open_dir(self) -> Result<()>
Remove the directory referenced by self
and consume self
.
Even though this implementation works in terms of handles as much as possible, removal is not guaranteed to be atomic with respect to a concurrent rename of the directory.
sourcepub fn remove_open_dir_all(self) -> Result<()>
pub fn remove_open_dir_all(self) -> Result<()>
Removes the directory referenced by self
, after removing all its
contents, and consume self
. Use carefully!
Even though this implementation works in terms of handles as much as possible, removal is not guaranteed to be atomic with respect to a concurrent rename of the directory.
sourcepub fn remove_file<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn remove_file<P: AsRef<Path>>(&self, path: P) -> Result<()>
Removes a file from a filesystem.
This corresponds to std::fs::remove_file
, but only accesses paths
relative to self
.
sourcepub fn rename<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
from: P,
to_dir: &Self,
to: Q
) -> Result<()>
pub fn rename<P: AsRef<Path>, Q: AsRef<Path>>( &self, from: P, to_dir: &Self, to: Q ) -> Result<()>
Rename a file or directory to a new name, replacing the original file if to already exists.
This corresponds to std::fs::rename
, but only accesses paths
relative to self
.
sourcepub fn set_permissions<P: AsRef<Path>>(
&self,
path: P,
perm: Permissions
) -> Result<()>
Available on non-WASI only.
pub fn set_permissions<P: AsRef<Path>>( &self, path: P, perm: Permissions ) -> Result<()>
Changes the permissions found on a file or a directory.
This corresponds to std::fs::set_permissions
, but only accesses
paths relative to self
. Also, on some platforms, this function
may fail if the file or directory cannot be opened for reading or
writing first.
sourcepub fn symlink_metadata<P: AsRef<Path>>(&self, path: P) -> Result<Metadata>
pub fn symlink_metadata<P: AsRef<Path>>(&self, path: P) -> Result<Metadata>
Query the metadata about a file without following symlinks.
This corresponds to std::fs::symlink_metadata
, but only accesses
paths relative to self
.
sourcepub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(
&self,
path: P,
contents: C
) -> Result<()>
pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>( &self, path: P, contents: C ) -> Result<()>
Write a slice as the entire contents of a file.
This corresponds to std::fs::write
, but only accesses paths
relative to self
.
sourcepub fn symlink_file<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
original: P,
link: Q
) -> Result<()>
Available on Windows only.
pub fn symlink_file<P: AsRef<Path>, Q: AsRef<Path>>( &self, original: P, link: Q ) -> Result<()>
Creates a new file symbolic link on a filesystem.
The original
argument provides the target of the symlink. The link
argument provides the name of the created symlink.
Despite the argument ordering, original
is not resolved relative to
self
here. link
is resolved relative to self
, and original
is
not resolved within this function.
The link
path is resolved when the symlink is dereferenced, relative
to the directory that contains it.
This corresponds to std::os::windows::fs::symlink_file
, but only
accesses paths relative to self
.
sourcepub fn symlink_dir<P: AsRef<Path>, Q: AsRef<Path>>(
&self,
original: P,
link: Q
) -> Result<()>
Available on Windows only.
pub fn symlink_dir<P: AsRef<Path>, Q: AsRef<Path>>( &self, original: P, link: Q ) -> Result<()>
Creates a new directory symlink on a filesystem.
The original
argument provides the target of the symlink. The link
argument provides the name of the created symlink.
Despite the argument ordering, original
is not resolved relative to
self
here. link
is resolved relative to self
, and original
is
not resolved within this function.
The link
path is resolved when the symlink is dereferenced, relative
to the directory that contains it.
This corresponds to std::os::windows::fs::symlink_dir
, but only
accesses paths relative to self
.
sourcepub fn try_clone(&self) -> Result<Self>
pub fn try_clone(&self) -> Result<Self>
Creates a new Dir
instance that shares the same underlying file
handle as the existing Dir
instance.
sourcepub fn exists<P: AsRef<Path>>(&self, path: P) -> bool
pub fn exists<P: AsRef<Path>>(&self, path: P) -> bool
Returns true
if the path points at an existing entity.
This corresponds to std::path::Path::exists
, but only
accesses paths relative to self
.
sourcepub fn try_exists<P: AsRef<Path>>(&self, path: P) -> Result<bool>
pub fn try_exists<P: AsRef<Path>>(&self, path: P) -> Result<bool>
Returns true
if the path points at an existing entity.
This corresponds to std::fs::try_exists
, but only
accesses paths relative to self
.
API correspondence with std
This API is not yet stable in std
, but is likely to be. For more
information, see the tracker issue.
sourcepub fn is_file<P: AsRef<Path>>(&self, path: P) -> bool
pub fn is_file<P: AsRef<Path>>(&self, path: P) -> bool
Returns true
if the path exists on disk and is pointing at a regular
file.
This corresponds to std::path::Path::is_file
, but only
accesses paths relative to self
.
sourcepub fn is_dir<P: AsRef<Path>>(&self, path: P) -> bool
pub fn is_dir<P: AsRef<Path>>(&self, path: P) -> bool
Checks if path
is a directory.
This is similar to std::path::Path::is_dir
in that it checks if
path
relative to Dir
is a directory. This function will
traverse symbolic links to query information about the destination
file. In case of broken symbolic links, this will return false
.
sourcepub fn open_ambient_dir<P: AsRef<Path>>(
path: P,
ambient_authority: AmbientAuthority
) -> Result<Self>
pub fn open_ambient_dir<P: AsRef<Path>>( path: P, ambient_authority: AmbientAuthority ) -> Result<Self>
Constructs a new instance of Self
by opening the given path as a
directory using the host process’ ambient authority.
Ambient Authority
This function is not sandboxed and may access any path that the host process has access to.
sourcepub fn open_parent_dir(
&self,
ambient_authority: AmbientAuthority
) -> Result<Self>
pub fn open_parent_dir( &self, ambient_authority: AmbientAuthority ) -> Result<Self>
Constructs a new instance of Self
by opening the parent directory
(aka “..”) of self
, using the host process’ ambient authority.
Ambient Authority
This function accesses a directory outside of the self
subtree.
sourcepub fn create_ambient_dir_all<P: AsRef<Path>>(
path: P,
ambient_authority: AmbientAuthority
) -> Result<()>
pub fn create_ambient_dir_all<P: AsRef<Path>>( path: P, ambient_authority: AmbientAuthority ) -> Result<()>
Recursively create a directory and all of its parent components if they are missing, using the host process’ ambient authority.
Ambient Authority
This function is not sandboxed and may access any path that the host process has access to.
sourcepub fn reopen_dir<Filelike: AsFilelike>(dir: &Filelike) -> Result<Self>
pub fn reopen_dir<Filelike: AsFilelike>(dir: &Filelike) -> Result<Self>
Construct a new instance of Self
from existing directory file
descriptor.
This can be useful when interacting with other libraries and or C/C++
code which has invoked openat(..., O_DIRECTORY)
external to this
crate.
Trait Implementations§
source§impl AsHandle for Dir
Available on Windows only.
impl AsHandle for Dir
source§fn as_handle(&self) -> BorrowedHandle<'_>
fn as_handle(&self) -> BorrowedHandle<'_>
source§impl AsHandleOrSocket for Dir
Available on Windows only.
impl AsHandleOrSocket for Dir
source§fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_>
fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_>
AsHandle::as_handle
and AsSocket::as_socket
but can return either type.source§impl AsRawHandle for Dir
Available on Windows only.
impl AsRawHandle for Dir
source§fn as_raw_handle(&self) -> RawHandle
fn as_raw_handle(&self) -> RawHandle
source§impl AsRawHandleOrSocket for Dir
Available on Windows only.
impl AsRawHandleOrSocket for Dir
source§fn as_raw_handle_or_socket(&self) -> RawHandleOrSocket
fn as_raw_handle_or_socket(&self) -> RawHandleOrSocket
AsRawHandle::as_raw_handle
and AsRawSocket::as_raw_socket
but can return either type.source§impl From<Dir> for OwnedHandle
Available on Windows only.
impl From<Dir> for OwnedHandle
source§fn from(dir: Dir) -> OwnedHandle
fn from(dir: Dir) -> OwnedHandle
source§impl From<Dir> for OwnedHandleOrSocket
Available on Windows only.
impl From<Dir> for OwnedHandleOrSocket
source§impl From<OwnedHandle> for Dir
Available on Windows only.
impl From<OwnedHandle> for Dir
source§fn from(handle: OwnedHandle) -> Self
fn from(handle: OwnedHandle) -> Self
source§impl FromRawHandle for Dir
Available on Windows only.
impl FromRawHandle for Dir
source§unsafe fn from_raw_handle(handle: RawHandle) -> Self
unsafe fn from_raw_handle(handle: RawHandle) -> Self
To prevent race conditions on Windows, the handle must be opened
without FILE_SHARE_DELETE
.
source§impl IntoRawHandle for Dir
Available on Windows only.
impl IntoRawHandle for Dir
source§fn into_raw_handle(self) -> RawHandle
fn into_raw_handle(self) -> RawHandle
source§impl IntoRawHandleOrSocket for Dir
Available on Windows only.
impl IntoRawHandleOrSocket for Dir
source§fn into_raw_handle_or_socket(self) -> RawHandleOrSocket
fn into_raw_handle_or_socket(self) -> RawHandleOrSocket
IntoRawHandle::into_raw_handle
and
IntoRawSocket::into_raw_socket
but can return either type.impl FilelikeViewType for Dir
Auto Trait Implementations§
impl RefUnwindSafe for Dir
impl Send for Dir
impl Sync for Dir
impl Unpin for Dir
impl UnwindSafe for Dir
Blanket Implementations§
source§impl<T> AsFilelike for Twhere
T: AsHandle,
impl<T> AsFilelike for Twhere T: AsHandle,
source§fn as_filelike(&self) -> BorrowedHandle<'_>
fn as_filelike(&self) -> BorrowedHandle<'_>
source§fn as_filelike_view<Target>(&self) -> FilelikeView<'_, Target>where
Target: FilelikeViewType,
fn as_filelike_view<Target>(&self) -> FilelikeView<'_, Target>where Target: FilelikeViewType,
&Target
. Read moresource§impl<T> AsGrip for Twhere
T: AsHandleOrSocket,
impl<T> AsGrip for Twhere T: AsHandleOrSocket,
source§fn as_grip(&self) -> BorrowedHandleOrSocket<'_>
fn as_grip(&self) -> BorrowedHandleOrSocket<'_>
source§impl<T> AsRawFilelike for Twhere
T: AsRawHandle,
impl<T> AsRawFilelike for Twhere T: AsRawHandle,
source§fn as_raw_filelike(&self) -> *mut c_void
fn as_raw_filelike(&self) -> *mut c_void
source§impl<T> AsRawGrip for Twhere
T: AsRawHandleOrSocket,
impl<T> AsRawGrip for Twhere T: AsRawHandleOrSocket,
source§fn as_raw_grip(&self) -> RawHandleOrSocket
fn as_raw_grip(&self) -> RawHandleOrSocket
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FromFilelike for Twhere
T: From<OwnedHandle>,
impl<T> FromFilelike for Twhere T: From<OwnedHandle>,
source§fn from_filelike(owned: OwnedHandle) -> T
fn from_filelike(owned: OwnedHandle) -> T
Self
from the given filelike object. Read moresource§fn from_into_filelike<Owned>(owned: Owned) -> Twhere
Owned: IntoFilelike,
fn from_into_filelike<Owned>(owned: Owned) -> Twhere Owned: IntoFilelike,
Self
from the given filelike object
converted from into_owned
. Read moresource§impl<T> FromHandle for Twhere
T: From<OwnedHandle>,
impl<T> FromHandle for Twhere T: From<OwnedHandle>,
source§fn from_handle(owned_handle: OwnedHandle) -> T
fn from_handle(owned_handle: OwnedHandle) -> T
FromHandle::from_handle
is replaced by From<OwnedHandle>::from
Self
from the given handle. Read moresource§fn from_into_handle<Owned>(into_owned: Owned) -> Selfwhere
Owned: Into<OwnedHandle>,
Self: Sized + From<OwnedHandle>,
fn from_into_handle<Owned>(into_owned: Owned) -> Selfwhere Owned: Into<OwnedHandle>, Self: Sized + From<OwnedHandle>,
source§impl<T> FromRawFilelike for Twhere
T: FromRawHandle,
impl<T> FromRawFilelike for Twhere T: FromRawHandle,
source§unsafe fn from_raw_filelike(raw: *mut c_void) -> T
unsafe fn from_raw_filelike(raw: *mut c_void) -> T
Self
from the raw value.source§impl<T> IntoFilelike for Twhere
T: Into<OwnedHandle>,
impl<T> IntoFilelike for Twhere T: Into<OwnedHandle>,
source§fn into_filelike(self) -> OwnedHandle
fn into_filelike(self) -> OwnedHandle
source§impl<T> IntoGrip for Twhere
T: Into<OwnedHandleOrSocket>,
impl<T> IntoGrip for Twhere T: Into<OwnedHandleOrSocket>,
source§fn into_grip(self) -> OwnedHandleOrSocket
fn into_grip(self) -> OwnedHandleOrSocket
self
and convert into an OwnedGrip
.source§impl<T> IntoHandle for Twhere
OwnedHandle: From<T>,
impl<T> IntoHandle for Twhere OwnedHandle: From<T>,
source§fn into_handle(self) -> OwnedHandle
fn into_handle(self) -> OwnedHandle
IntoHandle
is replaced by From<...> for OwnedHandle
or Into<OwnedHandle>
source§impl<T> IntoRawFilelike for Twhere
T: IntoRawHandle,
impl<T> IntoRawFilelike for Twhere T: IntoRawHandle,
source§fn into_raw_filelike(self) -> *mut c_void
fn into_raw_filelike(self) -> *mut c_void
source§impl<T> IntoRawGrip for Twhere
T: IntoRawHandleOrSocket,
impl<T> IntoRawGrip for Twhere T: IntoRawHandleOrSocket,
source§fn into_raw_grip(self) -> RawHandleOrSocket
fn into_raw_grip(self) -> RawHandleOrSocket
self
and convert into an RawGrip
.