logo

Struct std::io::Error

1.0.0 · source ·
pub struct Error { /* private fields */ }
Expand description

The error type for I/O operations of the Read, Write, Seek, and associated traits.

Errors mostly originate from the underlying OS, but custom instances of Error can be created with crafted error messages and a particular value of ErrorKind.

Implementations

source

impl Error

source

pub fn new<E>(kind: ErrorKind, error: E) -> Error where
E: Into<Box<dyn Error + Send + Sync>>,

Creates a new I/O error from a known kind of error as well as an arbitrary error payload.

This function is used to generically create I/O errors which do not originate from the OS itself. The error argument is an arbitrary payload which will be contained in this Error.

If no extra payload is required, use the From conversion from ErrorKind.

Examples
use std::io::{Error, ErrorKind};
// errors can be created from strings
let custom_error = Error::new(ErrorKind::Other, "oh no!");
// errors can also be created from other errors
let custom_error2 = Error::new(ErrorKind::Interrupted, custom_error);
// creating an error without payload
let eof_error = Error::from(ErrorKind::UnexpectedEof);
Run
source

pub fn other<E>(error: E) -> Error where
E: Into<Box<dyn Error + Send + Sync>>,

🔬 This is a nightly-only experimental API. (io_error_other #91946)

Creates a new I/O error from an arbitrary error payload.

This function is used to generically create I/O errors which do not originate from the OS itself. It is a shortcut for Error::new with ErrorKind::Other.

Examples
#![feature(io_error_other)]
use std::io::Error;
// errors can be created from strings
let custom_error = Error::other("oh no!");
// errors can also be created from other errors
let custom_error2 = Error::other(custom_error);
Run
source

pub fn last_os_error() -> Error

Returns an error representing the last OS error which occurred.

This function reads the value of errno for the target platform (e.g. GetLastError on Windows) and will return a corresponding instance of Error for the error code.

This should be called immediately after a call to a platform function, otherwise the state of the error value is indeterminate. In particular, other standard library functions may call platform functions that may (or may not) reset the error value even if they succeed.

Examples
use std::io::Error;
let os_error = Error::last_os_error();
println!("last OS error: {os_error:?}");
Run
source

pub fn from_raw_os_error(code: i32) -> Error

Creates a new instance of an Error from a particular OS error code.

Examples

On Linux:

use std::io;
let error = io::Error::from_raw_os_error(22);
assert_eq!(error.kind(), io::ErrorKind::InvalidInput);
Run

On Windows:

use std::io;
let error = io::Error::from_raw_os_error(10022);
assert_eq!(error.kind(), io::ErrorKind::InvalidInput);
Run
source

pub fn raw_os_error(&self) -> Option<i32>

Returns the OS error that this error represents (if any).

If this Error was constructed via last_os_error or from_raw_os_error, then this function will return Some, otherwise it will return None.

Examples
use std::io::{Error, ErrorKind};
fn print_os_error(err: &Error) {
 if let Some(raw_os_err) = err.raw_os_error() {
 println!("raw OS error: {raw_os_err:?}");
 } else {
 println!("Not an OS error");
 }
}
fn main() {
 // Will print "raw OS error: ...".
 print_os_error(&Error::last_os_error());
 // Will print "Not an OS error".
 print_os_error(&Error::new(ErrorKind::Other, "oh no!"));
}
Run
1.3.0 · source

pub fn get_ref(&self) -> Option<&(dyn Error + Send + Sync + 'static)>

Returns a reference to the inner error wrapped by this error (if any).

If this Error was constructed via new then this function will return Some, otherwise it will return None.

Examples
use std::io::{Error, ErrorKind};
fn print_error(err: &Error) {
 if let Some(inner_err) = err.get_ref() {
 println!("Inner error: {inner_err:?}");
 } else {
 println!("No inner error");
 }
}
fn main() {
 // Will print "No inner error".
 print_error(&Error::last_os_error());
 // Will print "Inner error: ...".
 print_error(&Error::new(ErrorKind::Other, "oh no!"));
}
Run
1.3.0 · source

pub fn get_mut(&mut self) -> Option<&mut (dyn Error + Send + Sync + 'static)>

Returns a mutable reference to the inner error wrapped by this error (if any).

If this Error was constructed via new then this function will return Some, otherwise it will return None.

Examples
use std::io::{Error, ErrorKind};
use std::{error, fmt};
use std::fmt::Display;
#[derive(Debug)]
struct MyError {
 v: String,
}
impl MyError {
 fn new() -> MyError {
 MyError {
 v: "oh no!".to_string()
 }
 }
 fn change_message(&mut self, new_message: &str) {
 self.v = new_message.to_string();
 }
}
impl error::Error for MyError {}
impl Display for MyError {
 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 write!(f, "MyError: {}", &self.v)
 }
}
fn change_error(mut err: Error) -> Error {
 if let Some(inner_err) = err.get_mut() {
 inner_err.downcast_mut::<MyError>().unwrap().change_message("I've been changed!");
 }
 err
}
fn print_error(err: &Error) {
 if let Some(inner_err) = err.get_ref() {
 println!("Inner error: {inner_err}");
 } else {
 println!("No inner error");
 }
}
fn main() {
 // Will print "No inner error".
 print_error(&change_error(Error::last_os_error()));
 // Will print "Inner error: ...".
 print_error(&change_error(Error::new(ErrorKind::Other, MyError::new())));
}
Run
1.3.0 · source

pub fn into_inner(self) -> Option<Box<dyn Error + Send + Sync>>

Consumes the Error, returning its inner error (if any).

If this Error was constructed via new then this function will return Some, otherwise it will return None.

Examples
use std::io::{Error, ErrorKind};
fn print_error(err: Error) {
 if let Some(inner_err) = err.into_inner() {
 println!("Inner error: {inner_err}");
 } else {
 println!("No inner error");
 }
}
fn main() {
 // Will print "No inner error".
 print_error(Error::last_os_error());
 // Will print "Inner error: ...".
 print_error(Error::new(ErrorKind::Other, "oh no!"));
}
Run
source

pub fn downcast<E>(self) -> Result<Box<E>, Self> where
E: Error + Send + Sync + 'static,

🔬 This is a nightly-only experimental API. (io_error_downcast #99262)

Attempt to downgrade the inner error to E if any.

If this Error was constructed via new then this function will attempt to perform downgrade on it, otherwise it will return Err.

If downgrade succeeds, it will return Ok, otherwise it will also return Err.

Examples
#![feature(io_error_downcast)]
use std::fmt;
use std::io;
use std::error::Error;
#[derive(Debug)]
enum E {
 Io(io::Error),
 SomeOtherVariant,
}
impl fmt::Display for E {
 // ...
}
impl Error for E {}
impl From<io::Error> for E {
 fn from(err: io::Error) -> E {
 err.downcast::<E>()
 .map(|b| *b)
 .unwrap_or_else(E::Io)
 }
}
Run
source

pub fn kind(&self) -> ErrorKind

Returns the corresponding ErrorKind for this error.

Examples
use std::io::{Error, ErrorKind};
fn print_error(err: Error) {
 println!("{:?}", err.kind());
}
fn main() {
 // Will print "Uncategorized".
 print_error(Error::last_os_error());
 // Will print "AddrInUse".
 print_error(Error::new(ErrorKind::AddrInUse, "oh no!"));
}
Run

Trait Implementations

source

impl Debug for Error

source

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

source

impl Display for Error

source

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

source

impl Error for Error

source

fn description(&self) -> &str

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

source

fn cause(&self) -> Option<&dyn Error>

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

source

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more

source

fn provide<'a>(&'a self, req: &mut Demand<'a>)

🔬 This is a nightly-only experimental API. (error_generic_member_access #99301)

Provides type based access to context intended for error reports. Read more

1.14.0 · source

impl From<ErrorKind> for Error

Intended for use for errors not exposed to the user, where allocating onto the heap (for normal construction via Error::new) is too costly.

source

fn from(kind: ErrorKind) -> Error

Converts an ErrorKind into an Error.

This conversion creates a new error with a simple representation of error kind.

Examples
use std::io::{Error, ErrorKind};
let not_found = ErrorKind::NotFound;
let error = Error::from(not_found);
assert_eq!("entity not found", format!("{error}"));
Run
source

impl<W> From<IntoInnerError<W>> for Error

source

fn from(iie: IntoInnerError<W>) -> Error

Converts to this type from the input type.

source

impl From<NulError> for Error

source

fn from(_: NulError) -> Error

Converts a alloc::ffi::NulError into a io::Error.

Auto Trait Implementations

impl !RefUnwindSafe for Error

impl Send for Error

impl Sync for Error

impl Unpin for Error

impl !UnwindSafe for Error

Blanket Implementations

source

impl<T> Any for T where
T: 'static + ?Sized,

source

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more

source

impl<T> Borrow<T> for T where
T: ?Sized,

const: unstable · source

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more

source

impl<T> BorrowMut<T> for T where
T: ?Sized,

const: unstable · source

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more

source

impl<T> From<T> for T

const: unstable · source

fn from(t: T) -> T

Returns the argument unchanged.

source

impl<T, U> Into<U> for T where
U: From<T>,

const: unstable · source

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source

impl<T> ToString for T where
T: Display + ?Sized,

source

default fn to_string(&self) -> String

Converts the given value to a String. Read more

source

impl<T, U> TryFrom<U> for T where
U: Into<T>,

type Error = Infallible

The type returned in the event of a conversion error.

const: unstable · source

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.

source

impl<T, U> TryInto<U> for T where
U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

const: unstable · source

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

AltStyle によって変換されたページ (->オリジナル) /