我犯了将文件路径视为字符串的错误

您作为开发人员所做的某些事情可以为您工作多年,然后在您最不期望的时候转过身来咬您。 这些都是您希望其他开发人员在您职业生涯的早期就告诉您的,因此您不必犯错误。 这篇文章是关于这些事情之一的,如果您正在阅读本文,请考虑一下我告诉您。

文件路径看起来像字符串。 您有许多目录,也许还有一个以扩展名结尾的文件名。 您使用` / `字符分隔目录和文件,结果看起来类似于` /path/to/file file`。 因此,您可以将它们视为字符串,将它们连接或串联起来,直到将它们传递给另一个用于读取或写入文件的文件方法为止。 这些是我几个月前的想法。 这是我错的地方。

别忘了Windows

如果您在Mac上(例如我有特权)或Linux进行开发,那么您可能已经阅读了上面的段落,而没有发现任何错误。 如果在Windows上进行开发,则在阅读` / `字符时,您可能会叹口气。

就像我多年以来所做的那样,当您使用Mac并部署到Linux环境时, Windows总是使用反斜杠 ,这太容易忘记了。 当您在需要在两种类型的平台上运行的命令行工具上工作时,发现自己犯了这个错误是非常痛苦的。 create-twilio-function是一种这样的命令行工具,它必须对以下方面进行一些 更改

mkdir(path + '/' + dirName);

const path = require ( 'path' );
mkdir(path.join(pathName, dirName));

这样它就可以在Windows上正常工作。

对于Windows用户,对不起。 对于其他所有人,在使用Node.js时, `path`模块是您的朋友。 每当需要连接两个路径时​​,请使用path.join 。 并检查其他实用程序,例如path.relative ,它返回从一个路径到另一路径的相对路径,以及path.normalize ,它返回解析段(如..或`..`)的路径。

不用理会path.sep ,它会根据您正在使用的系统返回一个/或一个\ ,只需使用path.join即可

路径的行为与字符串不同

我的第二个错误是这次使用Ruby。 这个比较微妙,回避了我的测试。 您会看到,可以使用` Pathname类创建路径的片段,然后将它们连接起来。 例如:

require "pathname"
path1 = Pathname.new( "path" )
path2 = Pathname.new( "to" )
path1 + path2
# => #<Pathname:path/to>

如您所见,“ Pathname ”对象具有连接路径的“ + ”运算符,就像“ + ”连接字符串一样。 实际上,它还可以结合使用字符串和路径:

require "pathname"
path1 = Pathname.new( "path" )
path2 = "to"
path1 + path2
# => #<Pathname:path/to>

一切似乎都很好,只是它无法正常工作。

require "pathname"
path1 = "to"
path2 = Pathname.new( "path" )
path1 + path2
# => TypeError (no implicit conversion of Pathname into String)

这样的错误意味着我们做错了什么,但这不是我遇到的问题。 不,我曾希望连接一个路径名和一个字符串,而不是连接两个字符串。 这体现在我的Rubygem`jekyll-gzip`中 。 您看,我正在尝试用以下行创建一组路径:

files = Dir.glob(dir + "**/*{ #{extensions} }" )

事实证明,在某些情况下, dir实际上是一个字符串而不是路径名,并且不包含分隔符。 因此,当我真的希望它寻找` "dirname/** /*{#{extensions}}" `时,全局变量正在寻找` "dirname **/*{#{extensions}}" "dirname/** /*{#{extensions}}" `。 串联两个路径名或一个路径名和一个字符串将添加分隔符( 正如有人在对我的commit的注释中指出的那样 ),但是串联两个字符串则不会。 这意味着gem开心地去寻找错误的路径名,没有找到文件,然后继续成功地执行任何操作。 用以下内容替换整行:

files = Dir.glob(File.join(dir, "**" , "*{ #{extensions} }" ))

解决了这个问题。 在这种情况下, File.join是避免字符串意外的方法。

始终使用内置的路径工具

无论您使用的是Node.js,Ruby还是任何其他语言,都不要试图将文件路径视为字符串。 它们在不同平台上的行为不同,并且路径和字符串混合在一起会导致难以调试的错误。

使用您的标准库,节省您的麻烦。

先前发布在https://philna.sh/blog/2020/03/04/mistakes-treating-paths-as-strings/

From: https://hackernoon.com/mistakes-ive-made-treating-file-paths-as-strings-lvhu3ym5

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值