美文网首页
fs-处理路径问题

fs-处理路径问题

作者: 壹贰是只猫 | 来源:发表于2022-11-17 14:26 被阅读0次

路径动态拼接的问题

一、在使用fs模块操作文件时,如果提供的操作路径是以 ./ 或 ../开头的相对路径时,很容易出现路径动态拼接错误的问题。

原因:代码在运行的时候,会执行node命令时所处的目录,动态拼接出操作文件的完整路径。

举个例子,一般来讲,我们如果进入到了要运行文件的那一层文件夹里面,直接node xxx.js 是可以运行的,因为它实际路径执行的操作是你的根路径+你要读写的文件路径。会出现的问题就是,如果你在次运行文件的文件夹的上一层文件夹,那么,即使你node 根路径+/xxxx/xxx.js 是不会执行这个路径的操作,会执行根路径 + 你要读写的文件路径。文字描述路径看不懂的话,请看下面:

//假设,我们有A文件夹,里面有B文件夹,B文件夹里有一个demo.js文件
//1、正常形式,我们在B文件夹下面
node demo.js    //此时是正确的,执行的是 .\A\B\demo.js\xxx.txt
//2、非正常形式,我们在A文件夹下
node /B/demo.js   //此时是错误的,执行的是  .\A\demo.js/xxx.txt

总结:当你输入文件地址采用相对路径的时候,再除了你当前文件夹的终端运行,此时都会发生错误的情况,因为文件夹的路径都会是,你当前所处终端位置+文件的相对路径

二、解决方案:在使用fs操作文件时,直接提供完整的路径,不要提供 ./ 或 ../开头的相对路径,从而防止路径动态拼接的问题。
但是,一般来讲,不提倡,因为移植性非常差,不利于维护。
而且js会认为\是转义字符,必须要'C:\\A\\B\\demo.js'

总结:想要解决文件路径在任何情况下运行不会出错,就需要将相对路径改为绝对路径,但是这个绝对路径,不能以''去拼接,会被转义,必须要'\',那是相当麻烦的。

三、终极解决方案:__dirname表示当前文件所处目录

如何印证此方案

第一步:我们首先可以打印__dirname,会得到此时文件所处的目录,并且不管我们在哪里去执行此文件,得到的目录都不会变,因此,得出__dirname会永远表示当前文件所处目录。
第二步:既然路径不会改变,就可以将绝对路径进行修改

const fs = require('fs')
fs.readFile(__dirname + '/html拓展标签.html', 'utf8', function (err, dataStr) {
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
})
demo.js

最终总结:综上三种形式,最优的解决方法,是通过__dirname来实现文件的引入路径完全正确。

小结:其实这篇文章,是两个月前就已经写好了,但是因为很多方面的原因,导致很多的文章都没有来得及更新,后面但凡有时间,都会更新,共同学习,写的内容都很基础,不难,希望能对大家有所帮助,最后给大家推荐一首歌《茫》

相关文章

网友评论

      本文标题:fs-处理路径问题

      本文链接:https://www.haomeiwen.com/subject/jhkdbrtx.html