fs中路径动态拼接问题
在node.js中进行读取或者写入操作的时候,我们都会在方法中传入一个文件的地址参数,之前我们的案例都是使用的相对路径,就像这样./text.txt。
虽然在当时的情况下我们可以正确读取或者写入,但是要是node的命令不在当前目录打开呢?
就比如这样:
我们的文件存放在/node/file/text.txt,但是node命令却在/node目录下打开,此时我们再执行之前的命令,就会发现执行失败,即使在命令行加上文件的相对路径,最后结果还是失败。
这就是使用fs模块操作文件的时候,如果提供的操作路径是以./或者../开头的相对路径的时候,就容易出现路径动态拼接错误。
那么有没有什么解决办法呢?
解决方法一:使用绝对路径
使用绝对路径就是在地址更换为当前文件在此电脑的完整地址。也就是C:/......的样子。
这样在执行命令的时候,就不会出现错误了。
但是这样的方法却有着一个致命的缺陷,那就是:移植性大大降低。
我们开发出来的程序总不可能一直都只在你这一台电脑上跑吧,使用绝对路径就会导致在其他电脑上找不到这个地址,就会报错。
所以不推荐这种方法!!
第二种方法:__dirname
使用方法:就是在之前的相对路径前面加一个__dirname
栗子:
1 | fs.readFile(__dirname+'/test.txt', 'utf-8', function (err, data) { |
此时我们将目录切换到上一级之后,使用命令行node ./node/readFile.js,加上文件目录,就可以正常读取了。
要是不使用__dirname执行此命令的话:就会报错
1 | [Error: ENOENT: no such file or directory, open 'D:\test.txt'] { |