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>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> 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§fn stream_len(&mut self) -> Result<u64, Error>
fn stream_len(&mut self) -> Result<u64, Error>
seek_stream_len
)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
)