8.其他对文件或目录的操作8.1修改文件名或移动文件目录fs.renamefs.rename(oldPath,newPath,callback(err))使用rename方法移动文件或目录。当移动后的路径与原路径相同时,修改文件名。如果移动的文件名或目录名与原文件名或目录名不同同时移动文件或目录constfs=require('fs');letmkdir='./mkdir';fs.rename('./one','./two',(err)=>{if(err){console.log(`fs.renamefileonetotwofailed~`);returnfalse;}console.log(`fs.renamefileoneto2success~`);})8.2创建文件硬链接fs.linkfs.link(oldPath,newPath)srcPath参数用于指定要创建的文件的完整路径和文件名作为硬链接。dstPath参数用于指定要创建的硬链接的完整路径和文件名。硬链接与源文件必须在同一卷上异步创建和删除文件的硬链接fs.linkSync(srcPath,dstPath)constfs=require('fs');letlinkFile='link.txt';letlinkCopyFile='linkCopy.txt';letdata='创建和删除文件的硬链接';fs.writeFile('./link.txt',data,(err)=>{if(err){console.log(`写入文件失败`);返回false;}fs.link(linkFile,linkCopyFile,(err)=>{if(err){console.log(`fs.link${linkFile}fi失败了~`);返回假;}console.log(`fs.link${linkCopyFile}文件成功~`);});});8.3删除文件的硬链接fs.unlinkfs.unlink(path,callback(err))constfs=require('fs');letlinkFile='link.txt';letlinkCopyFile='linkCopy.txt';letdata='创建和删除文件的硬链接';fs.unlink(linkCopyFile,(err)=>{if(err){console.log(`fs.unlink${linkFile}filefailed~`);returnfalse;}console.log(`fs.unlink${linkCopyFile}filesuccess~`);})8.4创建并查看符号链接符号链接是一种特殊的文件,只包含路径和文件名或目录另一个文件或目录的名称如果你打开一个符号链接文件进行编辑,运行系统会自动打开该符号链接指向的原始文件进行编辑。如果打开一个目录下的符号链接文件编辑或删除该文件,操作系统会打开该符号链接指向的原目录并执行相应的操作。如果删除符号链接文件,原文件或目录不会被删除,而如果删除或移动原文件或目录,符号链接文件不会被删除,这将导致一种称为断开链接的现象fs.symlink(srcPath,dstPath,[type],callback(err))type-->file,dir(default,non-windows只能使用dir),function(onlywindows)同步创建和查看符号链接fs.symlinkSync(srcPath,dstPath,[type])constfs=require('fs');fs.symlink('./one.js','./two.js','file',(err)=>{if(err){console.log(`fs.symlinkone.jstotwo.jsfailed~`,err);returnfalse;}console.log(`fs.symlinkone.jstotwo.jssuccess~`)})8.5readlinkreadsymbolsLink同步读取符号链接fs.readlinkSync(path),path指定符号链接的路径和文件名constfs=require('fs');fs.symlink('./one.js','./two.js','file',(err)=>{if(err){console.log(`fs.symlinkone.jstotwo.jsfailed~`,err);returnfalse;}console.log(`fs。将one.js符号链接到two.js成功~`);fs.readlink('./two.js',(err,linkString)=>{if(err){console.log(`fs.readlinkfilefailed~`,err);returnfalse;}console.日志(链接字符串);})});/***fs.symlinkone.jstotwo.jssuccess~*./one.js***/8.6Truncatedfilefs.truncate()所谓截断文件,指的是这样一个操作先清除文件内容,再修改文件大小。也就是说,它修改文件内容fs.truncate(filename,length,callback(err))同步截断文件fs.truncateSync(filename,length)one.js原始内容console.log('thisisone.js');截断one.js文件constfs=require('fs');fs.truncate('./one.js',10,(err)=>{if(err){console.log(`无法截断文件~,${err}`);returnfalse;}fs.stat('./one.js',(err,stats)=>{if(err){console.log(`fs.statfileone.jsfailed,${err}`);returnfalse;}console.log(`fs.statfileone.jssuccess~`);console.log(`./one.jssize:${stats.size}bytes`);});});/***console.lo***/8.7删除空目录只能删除空目录,如果不是空目录,则删除失败constfs=require('fs');fs.rmdir('./dirOne',(err)=>{if(err){console.log(`fs.rmdirdironefailed~,${err}`);returnfalse;}console.log(`fs.rmdirdironesuccess~`);});8.8监控文件或目录使用watchFile方法监控文件,当监控的文件被修改时执行一定的处理方法fs.watchFile(filename,[options],listener)options是一个对象,其中persistent属性默认为true,所以监听文件时,应用不会立即退出,改成false会立即退出optionsinterval属性方法设置为每隔几毫秒检查文件是否有变化function(curr,prev);,curr是一个fs.Stats对象,代表当前文件被修改后。prev参数值也是一个fs.Stats对象,表示修改前的当前文件constfs=require('fs');letfilename='./one.js'fs.watchFile(filename,{persistent:true,interval:100},(curr,prev)=>{if(Date.parse(prev.ctime)===0){console.log(`${filename}filewascreated`);}elseif(Date.parse(curr.ctime)===0){console.log(`${filename}wasdeleted`);}elseif(Date.parse(prev.mtime)!==Date.parse(curr.mtime)){console.log(`${filename}被删除修改`);}else{console.log(`${filename}文件未被操作`);}if(Date.parse(curr.ctime)!==0){console.log(`${filename}fileThesizeis${curr.size}bytes`);}})8.9Unwatchfs.unwatchFile(filename,[listener])watch方法,监控文件或目录,并在文件或目录修改时执行一些处理fs.watch(filename,[options],[listener])varwatcher=fs.watch('./file01.txt',function(event,filename){console.log(event);//事件名console.log(filename);//文件名watcher.close();//关闭监听});8.10遍历文件夹下的所有文件和目录,判断某个文件是否有内容constfs=require('fs');letfilePath=path.resolve('/root/files/order');fileDisplay(filePath);functionfileDisplay(filePath){fs.readdir(filePath,(err,files)=>{//这里的文件是直接子文件和目录下的子目录根目录if(err){console.error(err);returnfalse;}files.forEach((filename)=>{//遍历根目录下的直接子文件和子目录//使用拼接路径methodofpath//查找文件的路径letfileDir=path.join(filePath,filename);console.log(fileDir);fs.stat(fileDir,(err,stats)=>{//使用stat方法fs的判断遍历的对象是文件还是目录);if(isFile){if(fileDir.indexOf('user.js')>0){fs.readFile(fileDir,(err,targetFileData)=>{if(targetFileData.indexOf("varid='")>0){console.log('user.js有id');}else{console.log('user.js没有id',fileDir);}})}}else{fileDisplay(fileDir);}})})})}
