关于文件操作的函数
(1)工作路径
getwd() :列出当前工作路径;
setwd(dir) :设置工作路径,参数dir是要设置的路径。
.libPaths(new):查看或者设置包的路径
(2)列出路径下的文件/目录 :其返回值为字符串vector
#列出当前目录下的文件和文件夹
list.files(path = ".", pattern = NULL, all.files = FALSE,
full.names = FALSE, recursive = FALSE, ignore.case = FALSE,include.dirs = FALSE, no.. = FALSE)
#列出当前目录下的文件和文件夹
dir(path = ".", pattern = NULL, all.files = FALSE,
full.names = FALSE, recursive = FALSE, ignore.case = FALSE,include.dirs = FALSE, no.. = FALSE)
#列出当前目录下的所有子目录,默认recursive = TRUE
list.dirs(path = ".", full.names = TRUE, recursive = TRUE)
arguments:
- pattern – 查找的文件名,支持正则表达式;
- all.files – 逻辑值,FALSE(默认)仅仅返回可见的文件名,TRUE返回文件全名;
- full.names – 逻辑值,FALSE(默认)仅返回文件名,TRUE返回文件名包括路径;
- recursive – 逻辑值,FALSE(默认)仅返回当前目录下文件,TRUE递归的扫描所有目录下的文件;
- ignore.case – 逻辑值,FALSE(默认)文件名大小写敏感,TRUE忽略大小写;
- include.dirs -逻辑值,FALSE(默认)不添加子目录名,TRUE加入子目录名称;
(3)创建文件夹及设置权限
#查看指定路径下的(只能是目录)是否存在
dir.exists(paths)
#在指定的目录下创建一个新的文件夹
dir.create(path, showWarnings = TRUE,recursive = F)
#设置文件目录的最大权限
Sys.chmod(list.dirs("."), "777")
arguments:
- path – 字符串表示的路劲,路劲已经过path.expand处理,
- paths – 字符向量包含文件名或路径,参数paths可以是vector,即可以批量查看文件(目录)是否存在。
- showWarnings – 逻辑值,是否提示错误信息;
- recursive – 函数默认recursive为FALSE,即只新建path中的第一级子目录,而当recursive为TRUE时可以新建多级子目录。
#在当前工作目录下创建文件夹testfolder
dir.create(file.path(getwd(), 'testfolder'))
#默认的recursive为FALSE,创建子目录失败
dir.create(file.path(getwd(), 'testfolder2', 'subfolder'))
#文件夹不存在返回FALSE
dir.exists(file.path(getwd(), 'testfolder2', 'subfolder'))
#设置recursive为TRUE,创建子目录
dir.create(file.path(getwd(), 'testfolder2', 'subfolder'), recursive = TRUE)
#创建成功返回TRUE
dir.exists(file.path(getwd(), 'testfolder2', 'subfolder'))
(4)其他文件操作函数
- 创建:
file.create(..., showWarnings = TRUE) 用于创建一个文件,而不是文件夹(目录)
file.exists(...) 判断某个文件是否存在 - 删除:
file.remove(...) 删除某个文件
unlink(x, recursive = FALSE, force = FALSE)删除文件或目录
x是要删除的文件或目录,可以是vector(即批量删除);
当删除目录时,recursive应为TRUE,表示目录内文件一并删除。 - 命名:
file.rename(from, to) 重命名文件
from是原始文件(目录)名,to是新文件(目录)名,二者可以是vector,但是长度需相同
file.append(file1, file2) 把一个文件的内容追加到另一个文件之后 - 复制:
file.copy(from, to, overwrite = recursive, recursive = FALSE,
copy.mode = TRUE, copy.date = FALSE) 复制文件
from是原始文件(目录)名,to是新文件(目录)名,二者可以是vector,但是长度需相同;
overwrite 若为TRUE,则文件被覆盖;
recursive 复制目录时recursive需为TRUE;
copy.mode若为TRUE,permission bits一并复制过来;
copy.date若为TRUE,文件日期一并复制过来。
file.symlink(from, to)
file.link(from, to)
#文件不存在则创建文件,存在则覆盖之前的文件
file.create('cretestfile.txt')
#判断文件是否存在,返回TRUE
file.exists('cretestfile.txt')
#默认mode = 0判断文件是否存在,存在返回0
file.access('cretestfile.txt')
#删除文件cretestfile.txt,文件不存在会返回warning信息
file.remove('cretestfile.txt')
#读取bin目录下所有文件及目录
d <- dir(file.path(R.home(), "bin"))
#读取bin目录下所有文件及目录(包含全路径)
df <- dir(file.path(R.home(), "bin"), full.names = TRUE)
#列出所有存在的文件
d[file.access(df, 0) == 0]
#列出所有可执行文件
d[file.access(df, 1) == 0]
#列出所有可写文件
d[file.access(df, 2) == 0]
#列出所有可读文件
d[file.access(df, 4) == 0]
#创建并写入数据到文件A.txt和B.txt
cat("file A\n", file = "A.txt")
cat("file B\n", file = "B.txt")
cat("file C\n", file = "C.txt")
#添加文件C.txt的内容到A.txt和B.txt
file.append(c("A.txt", "B.txt"), "C.txt")
#修改文件名C.txt为D.txt
file.rename("C.txt", "D.txt")
#复制D.txt中的内容10遍,添加到文件A.txt和B.txt各5次
file.append(c("A.txt", "B.txt"), rep("D.txt", 10))
#读取文件A.txt和B.txt的内容
file.show(c("A.txt", "B.txt"))
#复制文件D.txt到C.txt
file.copy("D.txt", "C.txt")
#C.txt已存在,设置overwrite = TRUE进行覆盖
file.copy("D.txt", "C.txt", overwrite = TRUE)
#新建tmp文件夹,并拷贝A.txt和B.txt到tmp文件夹下
dir.create("tmp")
file.copy(c("A.txt", "B.txt"), "tmp")
#删除tmp文件夹
unlink("tmp", recursive = TRUE)
#删除文件
unlink(c("A.txt", "B.txt", "C.txt","D.txt"))