资讯专栏INFORMATION COLUMN

Node.js学习之路07——fs文件系统之对文件或目录执行的其他操作

lordharrd / 3369人阅读

摘要:如果打开一个文件的符号链接文件进行编辑,操作系统将自动打开符号链接中所指向的原文件进行编辑,如果打开一个目录的符号链接文件进行文件的操作编辑或删除操作,则操作系统将西东打开符号链接中所指向的原目录并执行相应的操作。

8. 对文件或目录执行的其他操作 8.1 修改文件名字或移动文件目录fs.rename

fs.rename(oldPath, newPath, callback(err))

使用rename方法移动文件或目录,当移动后的路径与原路经为同一路径,则修改该文件的名字

若移动后的文件名或目录名与原文件名或目录名不同时,则执行文件或目录的移动操作

const fs = require("fs");
let mkdir = "./mkdir";
fs.rename("./one", "./two", (err) => {
    if (err) {
        console.log(`fs.rename file one to two failed~`);
        return false;
    }
    console.log(`fs.rename file one to two success~`);
})
8.2 创建文件的硬链接fs.link

fs.link(oldPath, newPath)

srcPath参数用于指定需要被创建硬链接的文件的完整路径及文件名

dstPath参数用于指定被创建硬链接的完整路径及文件名,该硬连接与源文件必须位于同一卷中

异步创建与删除文件的硬链接fs.linkSync(srcPath, dstPath)

const fs = require("fs");
let linkFile = "link.txt";
let linkCopyFile = "linkCopy.txt";
let data = "创建与删除文件的硬链接";
fs.writeFile("./link.txt", data, (err) => {
    if (err) {
        console.log(`write file failed`);
        return false;
    }
    fs.link(linkFile, linkCopyFile, (err) => {
        if (err) {
            console.log(`fs.link ${linkFile} file failed~`);
            return false;
        }
        console.log(`fs.link ${linkCopyFile} file success~`);
    });
});
8.3 删除文件的硬链接fs.unlink

fs.unlink(path, callback(err))

const fs = require("fs");
let linkFile = "link.txt";
let linkCopyFile = "linkCopy.txt";
let data = "创建与删除文件的硬链接";
fs.unlink(linkCopyFile, (err) => {
    if (err) {
        console.log(`fs.unlink ${linkFile} file failed~`);
        return false;
    }
    console.log(`fs.unlink ${linkCopyFile} file success~`);
})
8.4 创建与查看符号链接
符号链接,是一种特殊的文件,这个文件中仅包含了另一个文件或目录的路径及文件名或目录名。如果打开一个文件的符号链接文件进行编辑,操作系统将自动打开符号链接中所指向的原文件进行编辑,如果打开一个目录的符号链接文件进行文件的操作编辑或删除操作,则操作系统将西东打开符号链接中所指向的原目录并执行相应的操作。如果删除符号链接文件,不会删除原文件或目录,如果删除或移动原文件互哦目录,符号链接文件也不会被删除,这是会产生一种称为断链的现象

fs.symlink(srcPath, dstPath, [type], callback(err))

type--> file, dir(default,非windows只能使用dir), function(only windows)

同步创建与查看符号链接fs.symlinkSync(srcPath, dstPath, [type])

const fs = require("fs");
fs.symlink("./one.js", "./two.js", "file", (err) =>{
    if(err) {
        console.log(`fs.symlink one.js to two.js failed~`, err);
        return false;
    } 
    console.log(`fs.symlink one.js to two.js success~`)
})
8.5 readlink读取符号链接

同步读取符号链接fs.readlinkSync(path)path指定符号链接的路径及文件名

const fs = require("fs");
fs.symlink("./one.js", "./two.js", "file", (err) => {
    if (err) {
        console.log(`fs.symlink one.js to two.js failed~`, err);
        return false;
    }
    console.log(`fs.symlink one.js to two.js success~`);
    fs.readlink("./two.js", (err, linkString) => {
        if (err) {
            console.log(`fs.readlink file failed~`, err);
            return false;
        }
        console.log(linkString);
    })
});
/**
* fs.symlink one.js to two.js success~
* ./one.js
* **/
8.6 截断文件fs.truncate()

所谓对文件进行截断操作,是指一种首先清除文件内容,然后修改文件尺寸的操作

换句话说就是对文件内容进行修改

fs.truncate(filename, length, callback(err))

同步截断文件fs.truncateSync(filename, length)

one.js原本内容

console.log("this is one.js");

one.js文件进行截断

const fs = require("fs");
fs.truncate("./one.js", 10, (err) => {
    if (err) {
        console.log(`对文件进行截断操作失败~, ${err}`);
        return false;
    }
    fs.stat("./one.js", (err, stats) => {
        if (err) {
            console.log(`fs.stat file one.js failed, ${err}`);
            return false;
        }
        console.log(`fs.stat file one.js success~`);
        console.log(`./one.js size: ${stats.size} bytes`);
    });
});
/**
* console.lo
* **/
8.7 删除空目录

只能删除空目录,如果不是空目录,会删除失败

const fs = require("fs");
fs.rmdir("./dirOne", (err) => {
    if (err) {
        console.log(`fs.rmdir dir one failed~, ${err}`);
        return false;
    }
    console.log(`fs.rmdir dir one success~`);
});
8.8 监视文件或目录

使用watchFile方法对文件进行监视,并且在监视到文件被修改时执行某些处理方法

fs.watchFile(filename, [options], listener)

options 是一个对象,persistent属性默认为true,所以当监视文件后,应用程序没有被立即退出,改为false就会立即退出。

options interval属性方法设置每隔多少毫秒检查一下该文件有没有发生变化

function(curr, prev);,currfs.Stats对象,代表被修改之后的当前文件

prev参数值也是一个fs.Stats对象,代表被修改之前的当前文件

const fs = require("fs");
let filename = "./one.js"
fs.watchFile(filename, {
    persistent: true,
    interval: 100
}, (curr, prev) => {
    if (Date.parse(prev.ctime) === 0) {
        console.log(`${filename}文件被创建`);
    } else if (Date.parse(curr.ctime) === 0) {
        console.log(`${filename}文件被删除`);
    } else if (Date.parse(prev.mtime) !== Date.parse(curr.mtime)) {
        console.log(`${filename}文件被修改`);
    } else {
        console.log(`${filename}文件没有被操作`);
    }
    if (Date.parse(curr.ctime) !== 0) {
        console.log(`${filename}文件的大小为${curr.size}bytes`);
    }
})
8.9 取消监控

fs.unwatchFile(filename, [listener])

watch方法,对文件或目录进行监视,并且在监视到文件或目录被修改时执行某些处理

fs.watch(filename, [options], [listener])

var watcher = fs.watch("./file01.txt", function (event, filename) {
    console.log(event);//事件名
    console.log(filename);//文件名
    watcher.close();//关闭监视
});
8.10 遍历文件夹里所有的文件和目录,并判断某一个文件里是否有某一些内容
const fs = require("fs");

let filePath = path.resolve("/root/files/order");
fileDisplay(filePath);

function fileDisplay(filePath) {
    fs.readdir(filePath, (err, files) => {
        // 这里的files是根目录下的直接子文件和子目录
        if (err) {
            console.error(err);
            return false;
        }
        files.forEach((filename) => {
            // 对根目录下的直接子文件和子目录进行遍历
            // 利用path的拼接路径方法
            // 找到该文件的路径
            let fileDir = path.join(filePath, filename);
            console.log(fileDir);
            fs.stat(fileDir, (err, stats) => {
                // 利用fs的stat方法判断遍历的对象是文件还是目录
                if (err) {
                    console.error("get file stats info failed");
                    return false;
                }
                let isFile = stats.isFile();
                let isDir = stats.isDirectory();
                if (isFile) {
                    if (fileDir.indexOf("user.js") > 0) {
                        fs.readFile(fileDir, (err, targetFileData) => {
                            if (targetFileData.indexOf("var id = "") > 0) {
                                console.log("the user.js has id");
                            } else {
                                console.log("the user.js has not id", fileDir);
                            }
                        })
                    }
                } else {
                    fileDisplay(fileDir);
                }
            })
        })
    })
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92876.html

相关文章

  • Node.js学习之路14——Process进程

    摘要:在中,只支持单线程。在这种场合下,如果能够使用多进程,则可以为每个请求分配一个进程,从而可以更好地使用服务器端的资源。进程进程对象的属性用于运行应用程序的可执行文件的绝对路径的版本号及其各依赖的版本号当前运行的平台用于读入标准输入流的对象。 Process 在Node.js中,只支持单线程。但是在应用程序中,如果只使用单线程进行操作,从接收请求开始到返回响应为止的这段时间内可能存在很长...

    darry 评论0 收藏0
  • Node.js学习之路06——fs文件系统目录操作文件信息

    6. 目录操作 6.1 创建目录 如果存在该目录,就创建失败 同步创建目录fs.mkdirSync(path, [mode]) const fs = require(fs); let mkdir = ./mkdir; fs.mkdir(mkdir, (err) => { if (err) { console.log(`mkdir ${mkdir} file faile...

    用户83 评论0 收藏0
  • Node.js学习之路08——fs文件系统之stream流基本介绍

    摘要:中各种用于读取数据的对象对象描述用于读取文件代表客户端请求或服务器端响应代表一个端口对象用于创建子进程的标准输出流。如果子进程和父进程共享输入输出流,则子进程的标准输出流被废弃用于创建子进程的标准错误输出流。 9. stream流 fs模块中集中文件读写方法的区别 用途 使用异步方式 使用同步方式 将文件完整读入缓存区 readFile readFileSync 将文件部...

    BoYang 评论0 收藏0
  • Node.js学习之路05——fs文件系统文件写入和读取

    fs文件系统 在Node.js中,提供一个fs模块,以实现文件及目录的读写操作。 1. 同步和异步方法 一般来讲,读取文件使用异步的方法,但是在读取例如系统配置文件时,应该使用同步的方法 2. 普通文件写入和读取 2.1 文件写入 2.1.1 写入一个基本的文本文件 如果不存在要写入的文件,那么将会自动创建一个文件 const fs = require(fs); let writeData = T...

    leanote 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<