Enum std::io::ErrorKind

1.0.0 · source ·
#[non_exhaustive]
pub enum ErrorKind {
Show 40 variants NotFound, PermissionDenied, ConnectionRefused, ConnectionReset, HostUnreachable, NetworkUnreachable, ConnectionAborted, NotConnected, AddrInUse, AddrNotAvailable, NetworkDown, BrokenPipe, AlreadyExists, WouldBlock, NotADirectory, IsADirectory, DirectoryNotEmpty, ReadOnlyFilesystem, FilesystemLoop, StaleNetworkFileHandle, InvalidInput, InvalidData, TimedOut, WriteZero, StorageFull, NotSeekable, FilesystemQuotaExceeded, FileTooLarge, ResourceBusy, ExecutableFileBusy, Deadlock, CrossesDevices, TooManyLinks, InvalidFilename, ArgumentListTooLong, Interrupted, Unsupported, UnexpectedEof, OutOfMemory, Other,
}
Expand description

一个列表,指定 I/O 错误的常规类别。

此列表旨在随着时间的增长而增长,不建议对其进行详尽的匹配。

io::Error 类型一起使用。

ErrorKind 上处理错误和匹配

在应用程序代码中,使用 match 作为您期望的 ErrorKind 值; 使用 _ 匹配 “所有其他错误”。

在想要验证测试不会返回任何已知的不正确错误类型的全面而彻底的测试中,您可能需要将当前完整的错误列表从此处剪切并粘贴到您的测试代码中,然后将 _ 匹配为正确的情况。 这似乎违反直觉,但它会使您的测试更加健壮。 特别是,如果您想验证您的代码确实产生了无法识别的错误类型,那么可靠的解决方案是检查所有已识别的错误类型并在这些情况下失败。

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

NotFound

找不到实体,通常是文件。

§

PermissionDenied

该操作缺少完成操作所需的权限。

§

ConnectionRefused

远程服务器拒绝了连接。

§

ConnectionReset

连接已由远程服务器重置。

§

HostUnreachable

🔬This is a nightly-only experimental API. (io_error_more #86442)

远程主机不可访问。

§

NetworkUnreachable

🔬This is a nightly-only experimental API. (io_error_more #86442)

无法访问包含远程主机的网络。

§

ConnectionAborted

(terminated) 连接被远程服务器中止。

§

NotConnected

网络操作失败,因为尚未连接。

§

AddrInUse

无法绑定套接字地址,因为该地址已在其他地方使用。

§

AddrNotAvailable

请求了不存在的接口,或者请求的地址不是本地的。

§

NetworkDown

🔬This is a nightly-only experimental API. (io_error_more #86442)

系统的网络已关闭。

§

BrokenPipe

操作失败,因为管道已关闭。

§

AlreadyExists

一个实体已经存在,通常是一个文件。

§

WouldBlock

该操作需要阻止才能完成,但是请求阻止操作不会发生。

§

NotADirectory

🔬This is a nightly-only experimental API. (io_error_more #86442)

出乎意料的是,文件系统对象不是目录。

例如,指定了一个文件系统路径,其中一个中间目录组件实际上是一个普通文件。

§

IsADirectory

🔬This is a nightly-only experimental API. (io_error_more #86442)

出乎意料的是,文件系统对象是一个目录。

当需要一个非目录时指定了一个目录。

§

DirectoryNotEmpty

🔬This is a nightly-only experimental API. (io_error_more #86442)

在需要空目录的地方指定了一个非空目录。

§

ReadOnlyFilesystem

🔬This is a nightly-only experimental API. (io_error_more #86442)

文件系统或存储介质是只读的,但尝试了写入操作。

§

FilesystemLoop

🔬This is a nightly-only experimental API. (io_error_more #86442)

在文件系统或 IO 子系统中循环; 通常,太多级别的符号链接。

有一个循环 (或过长的链) 解析文件系统对象或文件 IO 对象。

在 Unix 上,这通常是符号链接循环的结果; 或者,超过系统特定的符号链接遍历深度限制。

§

StaleNetworkFileHandle

🔬This is a nightly-only experimental API. (io_error_more #86442)

陈旧的网络文件句柄。

对于某些网络文件系统,尤其是 NFS,打开的文件 (或目录) 可能会因网络或服务器问题而失效。

§

InvalidInput

参数不正确。

§1.2.0

InvalidData

遇到对该操作无效的数据。

InvalidInput 不同,这通常意味着操作参数有效,但是该错误是由格式错误的输入数据引起的。

例如,如果文件的内容无效 UTF-8,则将文件读入字符串的函数将出现 InvalidData 错误。

§

TimedOut

I/O 操作的超时已到期,导致其被取消。

§

WriteZero

由于调用 write 返回 Ok(0) 而无法完成操作时,返回错误。

这通常意味着操作只有在写入特定数量的字节后才能成功,但是只能写入较少的字节数才能成功。

§

StorageFull

🔬This is a nightly-only experimental API. (io_error_more #86442)

底层存储 (通常是文件系统) 已满。

这不包括超出配额的错误。

§

NotSeekable

🔬This is a nightly-only experimental API. (io_error_more #86442)

Seek 在不可搜索的文件上。

尝试在不适合搜索的打开文件句柄上进行搜索 - 例如,在 Unix 上,使用 File::open 打开的命名管道。

§

FilesystemQuotaExceeded

🔬This is a nightly-only experimental API. (io_error_more #86442)

超出了文件系统配额。

§

FileTooLarge

🔬This is a nightly-only experimental API. (io_error_more #86442)

文件大于允许或支持。

这可能源于底层文件系统或文件访问 API 的硬限制,或源于管理强加的资源限制。 简单的磁盘已满,超出配额,都有自己的错误。

§

ResourceBusy

🔬This is a nightly-only experimental API. (io_error_more #86442)

资源繁忙。

§

ExecutableFileBusy

🔬This is a nightly-only experimental API. (io_error_more #86442)

可执行文件正忙。

试图写入一个文件,该文件也用作正在运行的程序。 (并非所有操作系统都检测到这种情况。)

§

Deadlock

🔬This is a nightly-only experimental API. (io_error_more #86442)

死锁 (avoided)。

文件锁定操作会导致死锁。 这种情况通常是在尽力而为的基础上检测到的。

§

CrossesDevices

🔬This is a nightly-only experimental API. (io_error_more #86442)

跨设备或跨文件系统 (hard) 链接或重命名。

🔬This is a nightly-only experimental API. (io_error_more #86442)

太多 (hard) 链接到同一个文件系统对象。

文件系统不支持对同一个文件建立如此多的硬链接。

§

InvalidFilename

🔬This is a nightly-only experimental API. (io_error_more #86442)

文件名无效。

如果超出文件名长度限制,也会导致此错误。

§

ArgumentListTooLong

🔬This is a nightly-only experimental API. (io_error_more #86442)

程序参数列表太长。

尝试运行外部程序时,会超出系统或进程对参数大小的限制。

§

Interrupted

该操作被中断。

通常可以重试中断的操作。

§1.53.0

Unsupported

此平台不支持此操作。

这意味着操作永远不会成功。

§1.6.0

UnexpectedEof

由于过早到达 “文件结尾” 而无法完成操作时,返回错误。

通常,这意味着操作只有在读取特定数量的字节后才能成功,但是只能读取较少的字节。

§1.54.0

OutOfMemory

操作无法完成,因为它未能分配足够的内存。

§

Other

不属于任何其他 I/O 错误类型的自定义错误。

这可用于构建您自己的不匹配任何 ErrorKindError

标准库不使用此 ErrorKind

标准库中不属于任何 I/O 错误类型的错误无法 匹配,并且只会匹配通配符 (_) 模式。

可能会在 future 中为其中一些添加新的 ErrorKind

Trait Implementations§

source§

impl Clone for ErrorKind

source§

fn clone(&self) -> ErrorKind

返回值的副本。 Read more
source§

fn clone_from(&mut self, source: &Self)

source 执行复制分配。 Read more
source§

impl Debug for ErrorKind

source§

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

使用给定的格式化程序格式化该值。 Read more
1.60.0 · source§

impl Display for ErrorKind

source§

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

显示了对 ErrorKind 的可读描述。

这类似于 impl Display for Error,但不需要先转换为 Error。

Examples
use std::io::ErrorKind;
assert_eq!("entity not found", ErrorKind::NotFound.to_string());
Run
1.14.0 · source§

impl From<ErrorKind> for Error

旨在用于未暴露给用户的错误,因为分配到堆上 (通过 Error::new 进行常规构建) 的代价太高了。

source§

fn from(kind: ErrorKind) -> Error

ErrorKind 转换为 Error

这种转换会创建一个带有错误类型的简单表示的新错误。

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 Hash for ErrorKind

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

将该值输入给定的 HasherRead more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

将这种类型的切片送入给定的 Hasher 中。 Read more
source§

impl Ord for ErrorKind

source§

fn cmp(&self, other: &ErrorKind) -> Ordering

此方法返回 selfother 之间的 OrderingRead more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

比较并返回两个值中的最大值。 Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

比较并返回两个值中的最小值。 Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd<Self>,

将值限制在某个时间间隔内。 Read more
source§

impl PartialEq<ErrorKind> for ErrorKind

source§

fn eq(&self, other: &ErrorKind) -> bool

此方法测试 selfother 值是否相等,并由 == 使用。
source§

fn ne(&self, other: &Rhs) -> bool

此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。
source§

impl PartialOrd<ErrorKind> for ErrorKind

source§

fn partial_cmp(&self, other: &ErrorKind) -> Option<Ordering>

如果存在,则此方法返回 selfother 值之间的顺序。 Read more
source§

fn lt(&self, other: &Rhs) -> bool

此方法测试的内容少于 (对于 selfother),并且由 < 操作员使用。 Read more
source§

fn le(&self, other: &Rhs) -> bool

此方法测试小于或等于 (对于 selfother),并且由 <= 运算符使用。 Read more
source§

fn gt(&self, other: &Rhs) -> bool

此方法测试大于 (对于 selfother),并且由 > 操作员使用。 Read more
source§

fn ge(&self, other: &Rhs) -> bool

此方法测试是否大于或等于 (对于 selfother),并且由 >= 运算符使用。 Read more
source§

impl Copy for ErrorKind

source§

impl Eq for ErrorKind

source§

impl StructuralEq for ErrorKind

source§

impl StructuralPartialEq for ErrorKind

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

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

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

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

source§

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

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

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

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

获得所有权后的结果类型。
source§

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常是通过克隆。 Read more
source§

fn clone_into(&self, target: &mut T)

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more
source§

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

source§

default fn to_string(&self) -> String

将给定值转换为 StringRead more
source§

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

§

type Error = Infallible

发生转换错误时返回的类型。
source§

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

执行转换。
source§

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

§

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

发生转换错误时返回的类型。
source§

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

执行转换。