files
位於 base
包(package)。 說明
這些函數為計算機文件係統提供了低級接口。
用法
file.create(..., showWarnings = TRUE)
file.exists(...)
file.remove(...)
file.rename(from, to)
file.append(file1, file2)
file.copy(from, to, overwrite = recursive, recursive = FALSE,
copy.mode = TRUE, copy.date = FALSE)
file.symlink(from, to)
file.link(from, to)
參數
..., file1, file2 |
字符向量,包含文件名或路徑。 |
from, to |
字符向量,包含文件名或路徑。對於 |
overwrite |
邏輯性;是否應該覆蓋現有的目標文件? |
showWarnings |
邏輯性;是否應該顯示失敗警告? |
recursive |
合乎邏輯的。如果 |
copy.mode |
邏輯:是否應該在可能的情況下複製文件權限位? |
copy.date |
邏輯:是否應盡可能保留文件日期?請參閱 |
細節
...
參數連接起來形成一個字符串:您可以單獨指定文件或將其指定為一個向量。所有這些函數都會擴展路徑名:請參閱path.expand
。 (file.exists
對於擴展後太長的路徑默默地報告錯誤:其餘的將發出警告。)
file.create
如果給定名稱的文件尚不存在,則創建文件;如果存在,則截斷它們。它們是使用“umask”設置(如果相關)允許的最大讀/寫權限創建的。默認情況下,如果操作失敗,則會發出警告(並說明原因)。
file.exists
返回一個邏輯向量,指示由其參數命名的文件是否存在。 (這裏‘exists’是指係統的stat
調用:僅當您擁有所需的權限時,文件才會被報告為存在stat
。還可以通過以下方式檢查是否存在file.access
,它可能使用不同的權限並因此獲得不同的結果。請注意,文件的存在並不意味著它是可讀的:對於該用途file.access
.) ‘file’ 的構成取決於係統,但應包含目錄。 (但是,在 Windows 上,目錄名稱不得包含尾部反斜杠或斜杠。)請注意,如果文件是類 Unix 上的符號鏈接,則結果指示鏈接是否指向實際文件,而不僅僅是鏈接是否存在。在 Windows 上,對於損壞的符號鏈接(連接),結果是不可靠的。最後,請注意不同的函數exists
它檢查是否存在R對象。
file.remove
嘗試刪除其參數中指定的文件。在大多數 Unix 平台上‘file’ 包括空目錄、符號鏈接、fifo 和套接字。在 Windows 上,‘file’ 表示常規文件,而不是空目錄。
file.rename
嘗試重命名文件(並且from
和to
必須具有相同的長度)。如果文件權限允許,這將覆蓋 to
的現有元素。這受到操作係統相應係統調用的限製(在類似 Unix 上參見類似 man 2 rename
的內容):特別是在 ‘file’ 的解釋中:大多數平台不會將文件從一個文件係統重命名為另一個文件係統。注意:這意味著將文件從臨時目錄重命名到用戶的文件空間或在軟件包安裝期間通常會失敗。 (在 Windows 上,file.rename
可以重命名文件,但不能跨卷重命名目錄。)在允許重命名目錄的平台上,通常 from
和 to
都必須是目錄,如果 to
存在,則它必須是目錄是一個空目錄。
file.append
嘗試將第二個參數命名的文件附加到第一個參數命名的文件中。這R下標回收規則用於對齊不同長度向量中給出的名稱。
file.copy
其工作方式類似於file.append
但參數按複製的自然順序排列。複製到現有目標文件將被跳過,除非overwrite = TRUE
。這to
參數可以指定單個現有目錄。如果copy.mode = TRUE
文件讀/寫/執行權限在可能的情況下被複製,受“限製”base files2’。 (在 Windows 上,這僅適用於文件。)不會複製 ACL 等其他安全屬性。在 POSIX 文件係統上,將複製符號鏈接的目標而不是鏈接本身,並且單獨複製硬鏈接。使用copy.date = TRUE
可能會也可能不會準確地複製時間戳(例如,可以省略小數秒),但更有可能這樣做R3.4.0。
file.symlink
和 file.link
在支持它們的文件係統上創建符號鏈接和硬鏈接。對於file.symlink
,to
參數可以指定單個現有目錄。 (Unix 和 macOS 本機文件係統都支持兩者。Windows 具有指向 NTFS 文件係統上的文件的硬鏈接以及與最新版本上的符號鏈接相關的概念:請參閱此幫助頁麵的 Windows 版本的以下部分。FAT 或 SMB 上會發生什麽情況 -掛載的文件係統是特定於操作係統的。)
帶有標記編碼的文件參數(請參閱Encoding
,如果可能的話,會轉換為本機編碼,但在使用 Unicode 文件操作的 Windows 上除外(因此,標記為 UTF-8 可用於訪問不在合適的本機編碼中的文件路徑)文件係統)。
值
這些函數返回一個邏輯向量,指示每個嘗試的文件的操作成功。對文件或路徑名使用缺失值將始終被視為失敗。
如果 showWarnings = TRUE
、file.create
會針對意外失敗發出警告。
不區分大小寫的文件係統
不區分大小寫的文件係統是 Windows 和 macOS 上的常態,但可以在所有操作係統上找到(例如 FAT 格式的 USB 驅動器可能不區分大小寫)。
這些函數很可能會匹配現有文件,而不管此類文件係統上的大小寫:然而,這是操作係統函數,文件名可能會映射為大寫或小寫。
警告
在包代碼中使用這些函數時,請務必檢查它們的返回值。這對於 file.rename
來說尤其重要,它具有特定於操作係統的限製(請注意,會話臨時目錄通常位於與工作目錄不同的文件係統上):隻能移植使用 file.rename
更改文件名( s) 在單個目錄中。
例子
cat("file A\n", file = "A")
cat("file B\n", file = "B")
file.append("A", "B")
file.create("A") # (trashing previous)
file.append("A", rep("B", 10))
if(interactive()) file.show("A") # -> the 10 lines from 'B'
file.copy("A", "C")
dir.create("tmp")
file.copy(c("A", "B"), "tmp")
list.files("tmp") # -> "A" and "B"
setwd("tmp")
file.remove("A") # the tmp/A file
file.symlink(file.path("..", c("A", "B")), ".")
# |--> (TRUE,FALSE) : ok for A but not B as it exists already
setwd("..")
unlink("tmp", recursive = TRUE)
file.remove("A", "B", "C")
作者
Ross Ihaka, Brian Ripley
也可以看看
file.info
, file.access
, file.path
, file.show
, list.files
, unlink
, basename
, path.expand
。
Sys.glob
用於擴展文件規範中的通配符。
file_test
、Sys.readlink
(對於‘symlink’s)。
https://en.wikipedia.org/wiki/Hard_link and https://en.wikipedia.org/wiki/Symbolic_link for the concepts of links and their limitations.
相關用法
- R files2 目錄和文件權限的操作
- R file.path 構造文件路徑
- R file.info 提取文件信息
- R file.show 顯示一個或多個文本文件
- R file.access 確定文件的可訪問性
- R file.choose 交互式選擇文件
- R findInterval 查找區間數或索引
- R find.package 查找套餐
- R formals 訪問和操縱形式參數
- R funprog 函數式編程語言中常見的高階函數
- R formatDL 格式說明列表
- R force 強製評估論證
- R format 以通用格式編碼
- R factor 因子
- R function 函數定義
- R formatC 使用 C 樣式格式進行格式化
- R format.pval 設置 P 值格式
- R forceAndCall 調用帶有強製參數的函數
- R format.info 格式(.)信息
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 File Manipulation。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。