當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R files 文件操作


R語言 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

字符向量,包含文件名或路徑。對於file.copyfile.symlinkto 也可以是單個現有目錄的路徑。

overwrite

邏輯性;是否應該覆蓋現有的目標文件?

showWarnings

邏輯性;是否應該顯示失敗警告?

recursive

合乎邏輯的。如果to是一個目錄,是否應該複製from中的目錄(及其內容)? (如 POSIX 操作係統上的 cp -R。)

copy.mode

邏輯:是否應該在可能的情況下複製文件權限位?

copy.date

邏輯:是否應盡可能保留文件日期?請參閱Sys.setFileTime

細節

... 參數連接起來形成一個字符串:您可以單獨指定文件或將其指定為一個向量。所有這些函數都會擴展路徑名:請參閱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 嘗試重命名文件(並且fromto 必須具有相同的長度)。如果文件權限允許,這將覆蓋 to 的現有元素。這受到操作係統相應係統調用的限製(在類似 Unix 上參見類似 man 2 rename 的內容):特別是在 ‘file’ 的解釋中:大多數平台不會將文件從一個文件係統重命名為另一個文件係統。注意:這意味著將文件從臨時目錄重命名到用戶的文件空間或在軟件包安裝期間通常會失敗。 (在 Windows 上,file.rename 可以重命名文件,但不能跨卷重命名目錄。)在允許重命名目錄的平台上,通常 fromto 都必須是目錄,如果 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.symlinkfile.link 在支持它們的文件係統上創建符號鏈接和硬鏈接。對於file.symlinkto 參數可以指定單個現有目錄。 (Unix 和 macOS 本機文件係統都支持兩者。Windows 具有指向 NTFS 文件係統上的文件的硬鏈接以及與最新版本上的符號鏈接相關的概念:請參閱此幫助頁麵的 Windows 版本的以下部分。FAT 或 SMB 上會發生什麽情況 -掛載的文件係統是特定於操作係統的。)

帶有標記編碼的文件參數(請參閱Encoding,如果可能的話,會轉換為本機編碼,但在使用 Unicode 文件操作的 Windows 上除外(因此,標記為 UTF-8 可用於訪問不在合適的本機編碼中的文件路徑)文件係統)。

這些函數返回一個邏輯向量,指示每個嘗試的文件的操作成功。對文件或路徑名使用缺失值將始終被視為失敗。

如果 showWarnings = TRUEfile.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

dir.create

Sys.glob 用於擴展文件規範中的通配符。

file_testSys.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-devel大神的英文原創作品 File Manipulation。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。