Struct std::fs::OpenOptions
1.0.0 · source · pub struct OpenOptions(_);
Expand description
可用于配置文件打开方式的选项和标志。
此构建器提供了配置 File
的打开方式以及打开的文件上允许哪些操作的功能。
File::open
和 File::create
方法是使用此构建器的常用选项的别名。
一般而言,使用 OpenOptions
时,首先要调用 OpenOptions::new
,然后链式调用方法以设置每个选项,然后调用 OpenOptions::open
,传递要打开的文件的路径。
这将为您提供一个内部带有 File
的 io::Result
,您可以对其进行进一步的操作。
Examples
打开一个文件以读取:
use std::fs::OpenOptions;
let file = OpenOptions::new().read(true).open("foo.txt");
Run打开一个文件进行读写,如果不存在则创建一个文件:
use std::fs::OpenOptions;
let file = OpenOptions::new()
.read(true)
.write(true)
.create(true)
.open("foo.txt");
RunImplementations§
source§impl OpenOptions
impl OpenOptions
sourcepub fn append(&mut self, append: bool) -> &mut Self
pub fn append(&mut self, append: bool) -> &mut Self
设置追加模式的选项。
此选项为 true 时,表示写入将追加到文件中,而不是覆盖以前的内容。
请注意,设置 .write(true).append(true)
与仅设置 .append(true)
具有相同的效果。
对于大多数文件系统,操作系统保证所有写操作都是原子的:不会浪费任何写操作,因为另一个进程会同时进行写操作。
使用追加模式时,可能有一个明显的注意事项:确保一次完成将所有在一起的数据写入文件。
这可以通过在将字符串传递给 write()
之前串联字符串,或使用缓冲的 writer (具有足够大小的缓冲区) 并在消息完成后调用 flush()
来完成。
如果同时使用读取和追加的访问权限打开文件,请注意,在打开之后以及每次写入之后,读取位置可能设置在文件末尾。
所以,在写入之前,保存当前位置 (使用 seek(SeekFrom::Current(0))
),并在下次读取之前恢复它。
Note
如果该函数不存在,则该函数不会创建该文件。使用 OpenOptions::create
方法来执行此操作。
Examples
use std::fs::OpenOptions;
let file = OpenOptions::new().append(true).open("foo.txt");
Runsourcepub fn create(&mut self, create: bool) -> &mut Self
pub fn create(&mut self, create: bool) -> &mut Self
设置选项以创建一个新文件,或者如果已经存在则将其打开。
为了创建文件,必须使用 OpenOptions::write
或 OpenOptions::append
访问。
另请参见 std::fs::write()
,了解使用给定数据创建文件的简单函数。
Examples
use std::fs::OpenOptions;
let file = OpenOptions::new().write(true).create(true).open("foo.txt");
Run1.9.0 · sourcepub fn create_new(&mut self, create_new: bool) -> &mut Self
pub fn create_new(&mut self, create_new: bool) -> &mut Self
设置创建新文件的选项,如果该文件已经存在则失败。
目标位置不允许存在任何文件,(dangling) 符号链接也不允许存在。这样,如果调用成功,则保证返回的文件是新文件。
此选项很有用,因为它是原子的。 否则,在检查文件是否存在与创建新文件之间,文件可能是由另一个进程创建的 (TOCTOU 竞态条件 / 攻击)。
如果设置了 .create_new(true)
,则忽略 .create()
和 .truncate()
。
必须使用写或追加访问权限打开文件才能创建新文件。
Examples
use std::fs::OpenOptions;
let file = OpenOptions::new().write(true)
.create_new(true)
.open("foo.txt");
Runsourcepub fn open<P: AsRef<Path>>(&self, path: P) -> Result<File>
pub fn open<P: AsRef<Path>>(&self, path: P) -> Result<File>
使用 self
指定的选项在 path
打开文件。
Errors
在许多不同的情况下,此函数将返回错误。其中列出了一些错误条件及其 io::ErrorKind
。
映射到 io::ErrorKind
不是函数兼容性契约的一部分。
NotFound
: 指定的文件不存在,并且未设置create
或create_new
。AlreadyExists
: 指定了create_new
并且文件已经存在。InvalidInput
: 打开选项无效组合 (在没有写访问、没有访问模式设置等情况下截断)。
以下错误目前与任何现有的 io::ErrorKind
都不匹配:
- 实际上,指定文件路径的目录组件之一不是目录。
- 文件系统级错误:已满磁盘,对只读文件系统请求的写许可权,超出磁盘配额,打开的文件过多,文件名太长,指定路径中的符号链接太多 (仅适用于 Unix 系统),等等。
Examples
use std::fs::OpenOptions;
let file = OpenOptions::new().read(true).open("foo.txt");
RunTrait Implementations§
source§impl Clone for OpenOptions
impl Clone for OpenOptions
source§fn clone(&self) -> OpenOptions
fn clone(&self) -> OpenOptions
source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
执行复制分配。 Read moresource§impl Debug for OpenOptions
impl Debug for OpenOptions
source§impl OpenOptionsExt for OpenOptions
Available on WASI only.
impl OpenOptionsExt for OpenOptions
source§fn lookup_flags(&mut self, flags: u32) -> &mut OpenOptions
fn lookup_flags(&mut self, flags: u32) -> &mut OpenOptions
wasi_ext
#71213)source§fn directory(&mut self, dir: bool) -> &mut OpenOptions
fn directory(&mut self, dir: bool) -> &mut OpenOptions
wasi_ext
#71213)OpenOptions
是否必须打开目录。 Read moresource§fn dsync(&mut self, enabled: bool) -> &mut OpenOptions
fn dsync(&mut self, enabled: bool) -> &mut OpenOptions
wasi_ext
#71213)source§fn nonblock(&mut self, enabled: bool) -> &mut OpenOptions
fn nonblock(&mut self, enabled: bool) -> &mut OpenOptions
wasi_ext
#71213)source§fn rsync(&mut self, enabled: bool) -> &mut OpenOptions
fn rsync(&mut self, enabled: bool) -> &mut OpenOptions
wasi_ext
#71213)source§fn sync(&mut self, enabled: bool) -> &mut OpenOptions
fn sync(&mut self, enabled: bool) -> &mut OpenOptions
wasi_ext
#71213)source§fn fs_rights_base(&mut self, rights: u64) -> &mut OpenOptions
fn fs_rights_base(&mut self, rights: u64) -> &mut OpenOptions
wasi_ext
#71213)source§fn fs_rights_inheriting(&mut self, rights: u64) -> &mut OpenOptions
fn fs_rights_inheriting(&mut self, rights: u64) -> &mut OpenOptions
wasi_ext
#71213)1.10.0 · source§impl OpenOptionsExt for OpenOptions
Available on Windows only.
impl OpenOptionsExt for OpenOptions
source§fn access_mode(&mut self, access: u32) -> &mut OpenOptions
fn access_mode(&mut self, access: u32) -> &mut OpenOptions
source§fn custom_flags(&mut self, flags: u32) -> &mut OpenOptions
fn custom_flags(&mut self, flags: u32) -> &mut OpenOptions
dwFileFlags
参数的额外标志设置为 CreateFile2
的指定值 (或将其与 attributes
和 security_qos_flags
组合以将 dwFlagsAndAttributes
设置为 CreateFile
)。 Read moresource§fn attributes(&mut self, attributes: u32) -> &mut OpenOptions
fn attributes(&mut self, attributes: u32) -> &mut OpenOptions
dwFileAttributes
参数设置为 CreateFile2
的指定值 (或将其与 custom_flags
和 security_qos_flags
组合以将 dwFlagsAndAttributes
设置为 CreateFile
)。 Read moresource§fn security_qos_flags(&mut self, flags: u32) -> &mut OpenOptions
fn security_qos_flags(&mut self, flags: u32) -> &mut OpenOptions
dwSecurityQosFlags
参数设置为 CreateFile2
的指定值 (或将其与 custom_flags
和 attributes
组合以将 dwFlagsAndAttributes
设置为 CreateFile
)。 Read more