[−][src]Struct same_file::Handle
A handle to a file that can be tested for equality with other handles.
If two files are the same, then any two handles of those files will compare equal. If two files are not the same, then any two handles of those files will compare not-equal.
A handle consumes an open file resource as long as it exists.
Equality is determined by comparing inode numbers on Unix and a combination of identifier, volume serial, and file size on Windows. Note that it's possible for comparing two handles to produce a false positive on some platforms. Namely, two handles can compare equal even if the two handles don't point to the same file. Check the source for specific implementation details.
Methods
impl Handle
[src]
pub fn from_path<P: AsRef<Path>>(p: P) -> Result<Handle>
[src]
Construct a handle from a path.
Note that the underlying File
is opened in read-only mode on all
platforms.
Errors
This method will return an io::Error
if the path cannot
be opened, or the file's metadata cannot be obtained.
The most common reasons for this are: the path does not
exist, or there were not enough permissions.
Examples
Check that two paths are not the same file:
use same_file::Handle; let source = Handle::from_path("./source")?; let target = Handle::from_path("./target")?; assert_ne!(source, target, "The files are the same.");
pub fn from_file(file: File) -> Result<Handle>
[src]
Construct a handle from a file.
Errors
This method will return an io::Error
if the metadata for
the given File
cannot be obtained.
Examples
Check that two files are not in fact the same file:
use same_file::Handle; let source = File::open("./source")?; let target = File::open("./target")?; assert_ne!( Handle::from_file(source)?, Handle::from_file(target)?, "The files are the same." );
pub fn stdin() -> Result<Handle>
[src]
Construct a handle from stdin.
Errors
This method will return an io::Error
if stdin cannot
be opened due to any I/O-related reason.
Examples
use same_file::Handle; let stdin = Handle::stdin()?; let stdout = Handle::stdout()?; let stderr = Handle::stderr()?; if stdin == stdout { println!("stdin == stdout"); } if stdin == stderr { println!("stdin == stderr"); } if stdout == stderr { println!("stdout == stderr"); }
The output differs depending on the platform.
On Linux:
$ ./example
stdin == stdout
stdin == stderr
stdout == stderr
$ ./example > result
$ cat result
stdin == stderr
$ ./example > result 2>&1
$ cat result
stdout == stderr
Windows:
> example
> example > result 2>&1
> type result
stdout == stderr
pub fn stdout() -> Result<Handle>
[src]
Construct a handle from stdout.
Errors
This method will return an io::Error
if stdout cannot
be opened due to any I/O-related reason.
Examples
See the example for stdin()
.
pub fn stderr() -> Result<Handle>
[src]
Construct a handle from stderr.
Errors
This method will return an io::Error
if stderr cannot
be opened due to any I/O-related reason.
Examples
See the example for stdin()
.
pub fn as_file(&self) -> &File
[src]
Return a reference to the underlying file.
Examples
Ensure that the target file is not the same as the source one, and copy the data to it:
use std::io::prelude::*; use std::io::Write; use std::fs::File; use same_file::Handle; let source = File::open("source")?; let target = File::create("target")?; let source_handle = Handle::from_file(source)?; let mut target_handle = Handle::from_file(target)?; assert_ne!(source_handle, target_handle, "The files are the same."); let mut source = source_handle.as_file(); let target = target_handle.as_file_mut(); let mut buffer = Vec::new(); // data copy is simplified for the purposes of the example source.read_to_end(&mut buffer)?; target.write_all(&buffer)?;
pub fn as_file_mut(&mut self) -> &mut File
[src]
Trait Implementations
impl AsRawHandle for Handle
[src]
fn as_raw_handle(&self) -> RawHandle
[src]
impl Debug for Handle
[src]
impl Eq for Handle
[src]
impl Hash for Handle
[src]
fn hash<__H: Hasher>(&self, state: &mut __H)
[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl IntoRawHandle for Handle
[src]
fn into_raw_handle(self) -> RawHandle
[src]
impl PartialEq<Handle> for Handle
[src]
impl StructuralEq for Handle
[src]
impl StructuralPartialEq for Handle
[src]
Auto Trait Implementations
impl RefUnwindSafe for Handle
impl Send for Handle
impl Sync for Handle
impl Unpin for Handle
impl UnwindSafe for Handle
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,