计算机文件系统(使用文件和树形目录)是一种存储和管理计算机数据的方法
1.list.dirs
#查看当前目录的子目录,返回字符向量,full.names-是否提供相对文件路径,recursive-是否列出递归到目录的文件/目录(list.dirs针对的是目录)
#当recursive=TRUE,输出value也包括路径本身
list.dirs(path="C:/home",full.names=TRUE,recursive=TRUE)
2.dir
与list.files函数功能相同,dir()返回一个字符向量,列出第一个参数指定目录中所有文件/子目录的名称
dir(path="C:/home",pattern=NULL,all.files=TRUE,full.names=FALSE,recursive=FALSE,ignore.case=FALSE,include.dirs=FALSE,no..=FALSE)
#pattern-可选的正则表达式,返回与正则表达式匹配的文件名,all.files-是否返回所有文件名(可见文件+隐藏文件),ignore.case-模式匹配是否应该不区分大小写,include.dirs-子目录名称是否应包含在递归列表中(总处于非递归的状态)
#注:KKKK/HHHH/oo.txt
dir(path="C:/home",recursive=T,include.dirs=F,full.names=T)
#包括递归到目录的文件(加粗),但不包括子目录名称
[1] "C:/home/base64.js"
[2] "C:/home/case_info.csv"
[3] "C:/home/com.js"
[4] "C:/home/CryptoJS.js"
[5] "C:/home/document_basic_info.csv"
[6] "C:/home/document_body.csv"
[7] "C:/home/getkey.js"
[8] "C:/home/KKKK/HHHH/oo.txt"
[9] "C:/home/legal_base_total.csv"
[10] "C:/home/legal_document_R.r"
[11] "C:/home/md5.js"
[12] "C:/home/Navi.js"
[13] "C:/home/pack_js.html"
[14] "C:/home/pack_js_RunEval.html"
[15] "C:/home/sha1.js"
[16] "C:/home/unpack_js_20180915调试getkey.html"
[17] "C:/home/unzip.js"
[18] "C:/home/unzip_runEval.js"
[19] "C:/home/查询条件.csv"
[20] "C:/home/查询条件历史/查询条件1.csv"
[21] "C:/home/历史版本/getkey.js"
dir(path="C:/home",recursive=F,include.dirs=F,full.names=T)
#不包括递归到目录的文件/目录,包括非递归状态的当前目录的子目录(加粗)
[1] "C:/home/base64.js"
[2] "C:/home/case_info.csv"
[3] "C:/home/com.js"
[4] "C:/home/CryptoJS.js"
[5] "C:/home/document_basic_info.csv"
[6] "C:/home/document_body.csv"
[7] "C:/home/getkey.js"
[8] "C:/home/KKKK"
[9] "C:/home/legal_base_total.csv"
[10] "C:/home/legal_document_R.r"
[11] "C:/home/md5.js"
[12] "C:/home/Navi.js"
[13] "C:/home/pack_js.html"
[14] "C:/home/pack_js_RunEval.html"
[15] "C:/home/sha1.js"
[16] "C:/home/unpack_js_20180915调试getkey.html"
[17] "C:/home/unzip.js"
[18] "C:/home/unzip_runEval.js"
[19] "C:/home/查询条件.csv"
[20] "C:/home/查询条件历史"
[21] "C:/home/历史版本"
dir(path="C:/home",recursive=T,include.dirs=T,full.names=T)
#包含递归到目录的文件/目录,也包括子目录名称
[1] "C:/home/base64.js"
[2] "C:/home/case_info.csv"
[3] "C:/home/com.js"
[4] "C:/home/CryptoJS.js"
[5] "C:/home/document_basic_info.csv"
[6] "C:/home/document_body.csv"
[7] "C:/home/getkey.js"
[8] "C:/home/KKKK"
[9] "C:/home/KKKK/HHHH"
[10] "C:/home/KKKK/HHHH/oo.txt"
[11] "C:/home/legal_base_total.csv"
[12] "C:/home/legal_document_R.r"
[13] "C:/home/md5.js"
[14] "C:/home/Navi.js"
[15] "C:/home/pack_js.html"
[16] "C:/home/pack_js_RunEval.html"
[17] "C:/home/sha1.js"
[18] "C:/home/unpack_js_20180915调试getkey.html"
[19] "C:/home/unzip.js"
[20] "C:/home/unzip_runEval.js"
[21] "C:/home/查询条件.csv"
[22] "C:/home/查询条件历史"
[23] "C:/home/查询条件历史/查询条件1.csv"
[24] "C:/home/历史版本"
[25] "C:/home/历史版本/getkey.js"
dir(path="C:/home",recursive=F,include.dirs=T,full.names=T)
#包括子目录名称,但不包括递归到目录的文件/目录
[1] "C:/home/base64.js"
[2] "C:/home/case_info.csv"
[3] "C:/home/com.js"
[4] "C:/home/CryptoJS.js"
[5] "C:/home/document_basic_info.csv"
[6] "C:/home/document_body.csv"
[7] "C:/home/getkey.js"
[8] "C:/home/KKKK"
[9] "C:/home/legal_base_total.csv"
[10] "C:/home/legal_document_R.r"
[11] "C:/home/md5.js"
[12] "C:/home/Navi.js"
[13] "C:/home/pack_js.html"
[14] "C:/home/pack_js_RunEval.html"
[15] "C:/home/sha1.js"
[16] "C:/home/unpack_js_20180915调试getkey.html"
[17] "C:/home/unzip.js"
[18] "C:/home/unzip_runEval.js"
[19] "C:/home/查询条件.csv"
[20] "C:/home/查询条件历史"
[21] "C:/home/历史版本"
3.file.info
file.info():参数是表示文件/目录的字符串向量,给出每个文件的大小、创建时间、是否为目录等信息,输出value为data.frame类
#mtime-文件修改时间,ctime-上次状态更改(指mode),atime-上次访问时间
file.info("C:/home/base64.js")
size isdir mode mtime
C:/home/base64.js 3670 FALSE 666 2018-09-02 22:27:15
ctime atime exe
2018-09-02 22:27:12 2018-09-02 22:27:12 no
4.dir.create
#只能创建目录,不能新建文件
dir.create(path,showWarnings=TRUE,recursive=FALSE,mode="0777"):新建一个目录
dir.create("C:/home/KKKK/jj") #前提C:/home/KKKK已经存在
dir.create("C:/home/gh/gj",recursive=FALSE) #error
dir.create("C:/home/gh/gj",recursive=TRUE) #递归创建两级子目录
5.file.exists
检查目录或文件是否存在
file.exists("C:/home/KKKK/jj") #TRUE
file.exists("base64.js") #TRUE
6.file.access
#确定目录/文件的可访问性mode=0(是否存在),mode=1(是否可执行),mode=2(是否可写),=4可读
file.access(name,mode=0) #name字符向量
7.file.rename
#重命名文件名或路径名
file.rename(from,to) #文件名或路径
file.rename('C:/home/KKKK','C:/home/KKGG') #更改目录路径名
file.rename('C:/home/KKGG/HHHH/oo.txt','C:/home/KKGG/HHHH/og.txt')
8.unlink+file.remove
删除文件和目录
unlink(x,recursive=FALSE,force=FALSE) #x允许使用通配符(通常是*?),recursive-目录是否应该递归删除(recursive=FALSE目录不被删除,如果目录中包括子目录或文件则需要递归删除)
unlink('C:/home/gg.txt') #删除文件,但没有到回收站
unlink('C:/home/gg') #gg目录并未被删除,即便是空目录
unlink('C:/home/gg',recursive=T) #gg目录被删除
#file.remove一般不用来删除目录(提示没有权限)
file.remove('C:/home/gg.txt')
9.file.path
file.path():以独立于平台的方式从组件中构造文件的路径,拼接目录字符串
gg<-file.path('KKGG','HHHH') #KKGG/HHHH
dir(gg) #og.txt
10.dirname
#获取完整的目录路径-字符形式
dirname('tian/gg/h/j') #tian/gg/h
dirname('tian/gg/h/j/o.txt') #tian/gg/h/j
11.basename
#获取最底层的目录名/文件名
basename('tian/gg/h/j') #j
basename('tian/gg/h/j/o.txt') #o.txt
12.normalizePath
#将文件路径转换为平台的规范形式(转换路径分隔符),以便比较绝对路径和相对路径
normalizePath(path,winslash='\\',mustWork=NA)
#path-字符向量,winslach-c("/", "\\") #只支持两种方式
13.file_test
file_test('-d','C:/home') #判断是否为目录
file_test('-f','C:/home/base64.js') #判断是否为文件
14.file.create
#文档创建,只能创建文件,不能创建目录
file.create('C:/home/hjii.txt')
file.create('C:/home/hjii.csv')
注:可用cat函数创建有内容的文件
15.file.append
#文档添加
file.append('C:/home/1.xls','C:/home/2.xls') #显示TRUE(文件size增加,但打开关闭后,文件size恢复原状),数据并未真正append,建议使用txt格式文本
16.file.copy
#文件复制(或文件移动),overwrite-是否应覆盖现有目标文件,recursive-逻辑值,如果是目录是否应该复制目录及其内容
file.copy(from,to,overwrite=recursive,recursive=FALSE,copy.mode=TRUE,copy.date=FALSE)
#将1.txt文件的内容复制到2.txt文件中(overwrite必须设置为TRUE),将1.txt的文件内容写入2.txt中
file.copy('C:/home/1.txt','C:/home/2.txt',overwrite=TRUE)
#将1.txt文件复制到C:/KKGG目录中
file.copy('C:/home/1.txt','C:/home/KKGG')
#如果C:/KKGG目录中有1.txt
file.copy('C:/home/1.txt','C:/home/KKGG',overwrite=F) #输出结果FALSE
file.copy('C:/home/1.txt','C:/home/KKGG',overwrite=T) #TRUE
#如果from和to都是目录,需要设置recursive=TRUE
17.file.show
以平台特定的方式显示一个或多个普通文本文件
file.show(file.path(R.home("doc"), "COPYRIGHTS"))
18.zip
#压缩文件
zip(zipfile,files,flags="-r9X",extras="",zip=Sys.getenv("R_ZIPCMD","zip"))
#zipfile-zip文件路径名,files-要包含的记录文件路径的字符向量
zip(zipfile="zz.zip",files=c("1.txt","2.txt"))
19.unzip
#解压缩zip文件,zipfile-zip文件的路径名,files-默认提取所有文件(要提取的记录文件路径的字符向量),exdir-提取文件的目录(如果没有,则创建)
unzip(zipfile,files=NULL,list=FALSE,overwrite=TRUE,junkpaths=FALSE,exdir=".",unzip="internal",setTimes=FALSE)
unzip(zipfile="tt.zip",files="1.txt",exdir="pp") #pp为新的目录
20.多个文件内容求和
#多个文件内容求和:建立一个函数计算目录树下所有文件内容的和(假设都是数值型)
#sumtree函数的输入为目录字符串
sumtree<-function(drtr){
tot<-0
fls<-dir(drtr,recursive=TRUE) #full.names=FALSE
for (f in fls){
f<-file.path(drtr,f) #构造目录路径
if (!file.info(f)$isdir)
{tot<-tot+sum(scan(f,quiet=TRUE))}
}
return(tot)
}