【发布时间】:2013-08-01 05:14:42
【问题描述】:
我想知道如何以编程方式在文件路径中出现的空格前添加\。我正在使用fs.readdir 来获取目录的内容,如果我没有将路径中的空格转义,则会收到ENOENT 错误,因为未转义的路径在UNIX 中无效。我想得到以下结果:
/path/with\ spaces/in/them/
但是,我在 NODE REPL 中遇到了一个 REGEX 问题。当我这样做时:
var path = '/path/with spaces/in/them/';
var escapedPath = path.replace(/(\s)/, "\\ ");
我得到了结果:
'/path/with\\ spaces/in/them/'
当我尝试在 Chrome 控制台中运行相同的代码时,我得到:
"/path/with\ spaces/in/them/"
这是想要的效果。
我不确定我是否遗漏了什么或者这是一个错误。我很困惑,因为 Node 运行在与 Chrome 相同的 Javascript 引擎上,所以我认为这些表达式会被解释为相同的。
如果有人知道解决此问题的方法,请告诉我。也许我错过了一些东西。我只需要能够在将路径传递到fs.readdir 之前对其进行转义,这样我就可以避免这些错误。
谢谢!
【问题讨论】:
-
对我来说听起来像是
fs.readdir中的一个错误。 -
实际结果在 Chrome 和 Node.js 中是一样的。不同之处在于他们如何显示它。尝试在
node.js中添加console.log,您会看到相同的结果。 -
对于未转义的字符串,
fs.readFile可以很好地与fs.readdir的输出配合使用。 -
感谢列昂尼德!我在 REPL 内部看到了问题,但是当我创建一个测试文件并且控制台记录了
escapedPath变量时,它确实被正确转义了。事实证明,fs.readdir根本不需要 要求您转义路径。实际上,我的代码中还有一个更难追踪的错误。我认为问题出在没有将输入转义到fs.readdir,但这根本不是问题。 -
与 fs.rename() ENOENT 有同样的问题。 (q-io/fs) 错误?
标签: node.js