Struct cap_tempfile::TempFile
source · pub struct TempFile<'d> { /* private fields */ }
Expand description
A file in a directory that is by default deleted when it goes out of scope, but may also be written persistently.
This corresponds most closely to tempfile::NamedTempFile
; however,
there are some important differences, so read the below carefully
to understand how to port existing code.
Name-able, but not necessarily named
By default, the file does not necessarily have an name until the file is written persistently.
On some operating systems like Linux, it is possible to create anonymous
temporary files that can still be written to disk persistently via O_TMPFILE
.
The advantage of this is that if the process (or operating system) crashes
while the file is being written, the temporary space will be automatically cleaned up.
For this reason, there is no API to retrieve the name, for either case.
To more closely match the semantics of tempfile::tempfile
, use crate::TempFile::new_anonymous
.
File permissions
Unlike the tempfile crate, the default TempFile::new
will use the same permissions as File::create_new
in
the Rust standard library. Concretely on Unix systems for example this can (depending on umask
) result in
files that are readable by all users. The rationale for this is to make it more ergonomic and natural to use this API to
atomically create new files and replace existing ones. Many cases that want “private” files will
prefer TempFile::new_anonymous
to have the file not be accessible at all outside the current process.
To fully control the permissions of the resulting file, you can use File::set_permissions
.
Implementations§
source§impl<'d> TempFile<'d>
impl<'d> TempFile<'d>
sourcepub fn new_anonymous(dir: &'d Dir) -> Result<File>
pub fn new_anonymous(dir: &'d Dir) -> Result<File>
Crate a new temporary file in the provided directory that will not have a
name. This corresponds to tempfile::tempfile_in
.
sourcepub fn as_file_mut(&mut self) -> &mut File
pub fn as_file_mut(&mut self) -> &mut File
Get a mutable reference to the underlying file.
Trait Implementations§
source§impl<'d> Read for TempFile<'d>
impl<'d> Read for TempFile<'d>
source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moresource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · source§fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>
buf
. Read more1.0.0 · source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moresource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,
Read
. Read moresource§impl<'d> Seek for TempFile<'d>
impl<'d> Seek for TempFile<'d>
source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
1.55.0 · source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
source§impl<'d> Write for TempFile<'d>
impl<'d> Write for TempFile<'d>
source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)1.0.0 · source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)