模組 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 不同,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