模組 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 指定如果路徑是符號連結,則不應遵循。

僅定義於符合 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

File::APPEND

BINARY

File::BINARY

CREAT

File::CREAT

DIRECT

File::DIRECT

DSYNC

File::DSYNC

EXCL

File::EXCL

FNM_CASEFOLD

File::FNM_CASEFOLD

FNM_DOTMATCH

File::FNM_DOTMATCH

FNM_EXTGLOB

File::FNM_EXTGLOB

FNM_NOESCAPE

File::FNM_NOESCAPE

FNM_PATHNAME

File::FNM_PATHNAME

FNM_SHORTNAME

File::FNM_SHORTNAME

FNM_SYSCASE

File::FNM_SYSCASE

LOCK_EX

File::LOCK_EX

LOCK_NB

File::LOCK_NB

LOCK_SH

File::LOCK_SH

LOCK_UN

File::LOCK_UN

NOATIME

File::NOATIME

NOCTTY

File::NOCTTY

NOFOLLOW

File::NOFOLLOW

NONBLOCK

File::NONBLOCK

NULL

File::NULL

RDONLY

File::RDONLY

RDWR

File::RDWR

RSYNC

File::RSYNC

SHARE_DELETE

File::SHARE_DELETE

SYNC

File::SYNC

TMPFILE

File::TMPFILE

TRUNC

File::TRUNC

WRONLY

File::WRONLY