【问题标题】:Escape spaces in File Path文件路径中的转义空格
【发布时间】: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


【解决方案1】:

试试这个

var path = "'file:///Users/kevin/folder with space'";

或者这个

var path = "\"file:///Users/kevin/folder with space\"";

【讨论】:

    【解决方案2】:

    fs.readdir 不需要您转义路径。我能够递归地将fs.readdir 输出目录传递回fs.readdir,没有任何问题。

    上述与 REGEX 相关的问题仅发生在 Node REPL 中。一旦我在一个文件中测试了上面的代码,我就可以通过 Node 运行它并获得与我在 Chrome 控制台中看到的相同的输出。

    我最终在我的代码中发现了一个有点难以追踪的错误。我首先认为它来自没有转义我发送到fs.readdir 的路径,但它实际上是一个问题,我是fs.stat fs.readdir 的输出,然后检查输出是文件还是目录并处理相应地。

    事实证明,来自 stat 的一些结果既不是文件也不是目录,我的函数没有任何方法可以处理这个问题,所以它只是返回了。因为我没有处理程序,所以我的节点程序突然停止了。我所要做的就是添加一个额外的else 条件来捕获非文件/目录的情况(无论如何我都不关心)。

    现在它工作正常!

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 2015-07-18
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 2011-04-13
      • 2014-09-07
      相关资源
      最近更新 更多