fs中路径动态拼接问题

fs中路径动态拼接问题

node.js中进行读取或者写入操作的时候,我们都会在方法中传入一个文件的地址参数,之前我们的案例都是使用的相对路径,就像这样./text.txt

虽然在当时的情况下我们可以正确读取或者写入,但是要是node的命令不在当前目录打开呢?

就比如这样:

我们的文件存放在/node/file/text.txt,但是node命令却在/node目录下打开,此时我们再执行之前的命令,就会发现执行失败,即使在命令行加上文件的相对路径,最后结果还是失败。

这就是使用fs模块操作文件的时候,如果提供的操作路径是以./或者../开头的相对路径的时候,就容易出现路径动态拼接错误。

那么有没有什么解决办法呢?

解决方法一:使用绝对路径

使用绝对路径就是在地址更换为当前文件在此电脑的完整地址。也就是C:/......的样子。

这样在执行命令的时候,就不会出现错误了。
但是这样的方法却有着一个致命的缺陷,那就是:移植性大大降低。

我们开发出来的程序总不可能一直都只在你这一台电脑上跑吧,使用绝对路径就会导致在其他电脑上找不到这个地址,就会报错。

所以不推荐这种方法!!

第二种方法:__dirname

使用方法:就是在之前的相对路径前面加一个__dirname

栗子:

1
2
3
4
fs.readFile(__dirname+'/test.txt', 'utf-8', function (err, data) {
console.log(err);
console.log(data);
})

此时我们将目录切换到上一级之后,使用命令行node ./node/readFile.js,加上文件目录,就可以正常读取了。

要是不使用__dirname执行此命令的话:就会报错

1
2
3
4
5
6
[Error: ENOENT: no such file or directory, open 'D:\test.txt'] {
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'D:\\test.txt'
}