模块 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::RSYNC 和 File::DSYNC

标志 File::SYNC、File::RSYNC 或 File::DSYNC 指定 I/O 操作与底层文件系统的同步。

这些标志仅对符合 POSIX 的系统有效。

请注意,这些标志的行为可能会因所使用的操作系统和文件系统而略有不同。此外,由于 I/O 操作的同步特性,使用这些标志会对性能产生影响,因此应谨慎使用,尤其是在对性能要求较高的应用程序中。

File::NOCTTY

标志 File::NOCTTY 指定如果该流是终端设备,则该设备不会成为该进程的控制终端。

仅为符合 POSIX 的系统定义。

File::DIRECT

标志 File::DIRECT 请求将与流进行 I/O 的缓存影响降至最低。

仅为符合 POSIX 的系统定义。

File::NOATIME

标志 File::NOATIME 指定打开流的行为不应修改其访问时间 (atime)。

仅为符合 POSIX 的系统定义。

File::NOFOLLOW

标志 File::NOFOLLOW 指定如果 path 是符号链接,则不应跟随该符号链接。

仅为符合 POSIX 的系统定义。

File::TMPFILE

标志 File::TMPFILE 指定打开的流应为新的临时文件。

仅为符合 POSIX 的系统定义。

其他文件访问常量

File::NONBLOCK

如果可能,该文件将以非阻塞模式打开。打开操作和对文件的任何后续 I/O 操作都不会导致调用进程等待。

File::BINARY

标志 File::BINARY 指定该流应以二进制模式访问。

File::SHARE_DELETE

标志 File::SHARE_DELETE 允许其他进程以删除访问权限打开该流。

仅限 Windows。

如果该流在没有 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’;行为类似于 regexp union(例如,'(?: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

标志 File::FNM_SHORTNAME 允许模式匹配短名称(如果存在)。

仅限 Windows。

File::FNM_SYSCASE

标志 File::FNM_SYSCASE 指定大小写敏感性与底层操作系统相同;对 File.fnmatch 有效,但对 Dir.glob 无效。

其他常量

File::NULL

标志 File::NULL 包含空设备的字符串值。