模块 File::Constants
模块 File::Constants
定义了与文件相关的常量。
这里有两个常量系列
可以使用方法 File::Constants.constants 检索为本地进程定义的文件常量
File::Constants.constants.take(5) # => [:RDONLY, :WRONLY, :RDWR, :APPEND, :CREAT]
文件访问¶ ↑
文件访问常量可以与以下方法的可选参数 mode
一起使用
读/写访问¶ ↑
可以通过文件访问常量指定流的读写访问。
常量可以作为其他此类常量的按位 OR 的一部分指定。
可以指定本节中常量的任意组合。
File::RDONLY¶ ↑
标志 File::RDONLY 指定流应仅打开以供读取
filepath = '/tmp/t.tmp' f = File.new(filepath, File::RDONLY) f.write('Foo') # Raises IOError (not opened for writing).
File::WRONLY¶ ↑
标志 File::WRONLY 指定流应仅打开以供写入
f = File.new(filepath, File::WRONLY) f.read # Raises IOError (not opened for reading).
File::RDWR¶ ↑
标志 File::RDWR 指定流应同时打开以进行读取和写入
f = File.new(filepath, File::RDWR) f.write('Foo') # => 3 f.rewind # => 0 f.read # => "Foo"
文件定位¶ ↑
File::APPEND¶ ↑
标志 File::APPEND 指定流应以追加模式打开。
在每次写入操作之前,位置都将设置为流的末尾。位置的修改和随后的写入操作将作为一个单独的原子步骤执行。
File::TRUNC¶ ↑
标志 File::TRUNC 指定流应在开头处被截断。如果文件存在并且成功打开以进行写入,则将其截断到位置零;其 ctime 和 mtime 将被更新。
对 FIFO 特殊文件或终端设备没有影响。对其他文件类型的影响由实现定义。将 File::TRUNC 与 File::RDONLY 一起使用的结果是未定义的。
创建和保留¶ ↑
File::CREAT¶ ↑
标志 File::CREAT 指定如果流尚不存在,则应创建该流。
如果文件存在
- Raise an exception if File::EXCL is also specified. - Otherwise, do nothing.
如果文件不存在,则创建该文件。成功完成后,将更新文件的 atime、ctime 和 mtime,并将更新父目录的 ctime 和 mtime。
File::EXCL¶ ↑
标志 File::EXCL 指定流不应该已经存在;如果同时指定了标志 File::CREAT 和 File::EXCL 并且流已经存在,则会引发异常。
对文件的存在和创建的检查作为原子操作执行。
如果同时指定了 File::EXCL 和 File::CREAT 并且路径指定了一个符号链接,则无论符号链接的内容如何,都会引发异常。
如果指定了 File::EXCL 但未指定 File::CREAT,则结果是未定义的。
POSIX 文件常量¶ ↑
某些文件访问常量仅在兼容 POSIX 的系统上定义;它们是
-
File::SYNC。
-
File::DSYNC。
-
File::RSYNC。
-
File::DIRECT。
-
File::NOATIME。
-
File::NOCTTY。
-
File::NOFOLLOW。
-
File::TMPFILE。
File::SYNC、File::RSYNC 和 File::DSYNC¶ ↑
标志 File::SYNC、File::RSYNC 或 File::DSYNC 指定 I/O 操作与底层文件系统的同步。
这些标志仅对兼容 POSIX 的系统有效。
-
File::SYNC 指定所有写入操作(数据和元数据)都应立即刷新到底层存储设备。这意味着数据将写入存储设备,并且文件元数据(例如,文件大小、时间戳、权限)也将同步。这可确保在将控制权返回给调用程序之前,数据已安全存储在存储介质上。此标志可能会对性能产生重大影响,因为它需要同步写入,而同步写入可能比异步写入慢。
-
File::RSYNC 指定对文件执行的任何读取操作都将一直持续到所有未完成的写入操作(已发出但未完成的操作)也同步为止。当您想要读取最新数据(该数据可能仍在写入过程中)时,这会很有用。
-
File::DSYNC 指定所有数据写入操作都应立即刷新到底层存储设备;这不同于 File::SYNC,后者要求还必须同步元数据。
请注意,这些标志的行为可能会因所使用的操作系统和文件系统而略有不同。此外,由于 I/O 操作的同步特性,使用这些标志可能会对性能产生影响,因此应谨慎使用,尤其是在对性能至关重要的应用程序中。
File::NOCTTY¶ ↑
标志 File::NOCTTY 指定如果流是终端设备,则该设备不会成为进程的控制终端。
仅对兼容 POSIX 的系统定义。
File::DIRECT¶ ↑
标志 File::DIRECT 请求最大程度地减少流到和来自 I/O 的缓存效果。
仅对兼容 POSIX 的系统定义。
File::NOATIME¶ ↑
标志 File::NOATIME 指定打开流的行为不应修改其访问时间 (atime)。
仅对兼容 POSIX 的系统定义。
File::NOFOLLOW¶ ↑
标志 File::NOFOLLOW 指定如果路径是符号链接,则不应遵循。
仅对兼容 POSIX 的系统定义。
File::TMPFILE¶ ↑
标志 File::TMPFILE 指定打开的流应为新的临时文件。
仅对兼容 POSIX 的系统定义。
其他文件访问常量¶ ↑
File::NONBLOCK¶ ↑
如果可能,文件将以非阻塞模式打开。打开操作或对文件执行的任何后续 I/O 操作都不会导致调用进程等待。
File::BINARY¶ ↑
标志 File::BINARY 指定流应以二进制模式访问。
File::SHARE_DELETE(仅限 Windows)¶ ↑
标志 File::SHARE_DELETE 启用其他进程以删除访问权限打开流。
如果流在没有 File::SHARE_DELETE 的情况下打开以(本地)删除访问权限,并且另一个进程尝试以删除访问权限打开它,则尝试失败,并且不会为该进程打开流。
锁定¶ ↑
四个文件常量与流锁定相关;请参阅 File#flock
File::LOCK_EX¶ ↑
标志 File::LOCK_EX 指定独占锁;一次只能有一个进程锁定流。
File::LOCK_NB¶ ↑
标志 File::LOCK_NB 指定流的非阻塞锁定;可以与 File::LOCK_EX 或 File::LOCK_SH 结合使用。
File::LOCK_SH¶ ↑
标志 File::LOCK_SH 指定多个进程可以同时锁定流。
File::LOCK_UN¶ ↑
标志 File::LOCK_UN 指定不锁定流。
文件名通配常量(File::FNM_*)¶ ↑
文件名通配常量可以与以下方法的可选参数 flags
一起使用
常量为
File::FNM_CASEFOLD¶ ↑
标志 File::FNM_CASEFOLD 使模式对 File.fnmatch
(但不是 Dir.glob
)不区分大小写。
File::FNM_DOTMATCH¶ ↑
标志 File::FNM_DOTMATCH 使 '*'
模式匹配以 '.'
开头的文件名。
File::FNM_EXTGLOB¶ ↑
标志 File::FNM_EXTGLOB 启用模式 '{a,b}'
,它匹配模式‘a’和模式‘b’;表现得像 正则表达式并集(例如,'(?:a|b)'
)
pattern = '{LEGAL,BSDL}' Dir.glob(pattern) # => ["LEGAL", "BSDL"] Pathname.glob(pattern) # => [#<Pathname:LEGAL>, #<Pathname:BSDL>] pathname.glob(pattern) # => [#<Pathname:LEGAL>, #<Pathname:BSDL>]
File::FNM_NOESCAPE¶ ↑
标志 File::FNM_NOESCAPE 禁用 '\'
转义。
File::FNM_PATHNAME¶ ↑
标志 File::FNM_PATHNAME 指定模式 '*'
和 '?'
不匹配目录分隔符(常量 File::SEPARATOR 的值)。
File::FNM_SHORTNAME(仅限 Windows)¶ ↑
标志 File::FNM_SHORTNAME 允许模式匹配短名称(如果存在)。
File::FNM_SYSCASE¶ ↑
标志 File::FNM_SYSCASE 指定区分大小写与否与底层操作系统相同;对 File.fnmatch
有效,但对 Dir.glob
无效。
其他常量¶ ↑
File::NULL¶ ↑
标志 File::NULL 包含空设备的字符串值
-
在类 Unix 的操作系统上为
'/dev/null'
。 -
在 Windows 上为
'NUL'
。
常量
- APPEND
- BINARY
- CREAT
- DIRECT
- DSYNC
- EXCL
- FNM_CASEFOLD
- FNM_DOTMATCH
- FNM_EXTGLOB
- FNM_NOESCAPE
- FNM_PATHNAME
- FNM_SHORTNAME
- FNM_SYSCASE
- LOCK_EX
- LOCK_NB
- LOCK_SH
- LOCK_UN
- NOATIME
- NOCTTY
- NOFOLLOW
- NONBLOCK
- NULL
- RDONLY
- RDWR
- RSYNC
- SHARE_DELETE
- SYNC
- TMPFILE
- TRUNC
- WRONLY