区分真正的Windows目录与"向后兼容性"那些有node.js的

时间:2016-05-22 22:35:56

标签: node.js windows

我(德语)Windows 10列表中的fs.readdir()方法"程序"作为C:\中的目录。

这当然是着名的"假的"目录(就像C:\Documents and Settings)链接到C:\Program Files以保持开发在Windows XP下安装的程序的向后兼容性。

问题是我无法区分这种目录与真正的"真实"之一。

  • fs.statsSync("C:\\Programme").isDirectory()返回true
  • fs.statsSync("C:\\Programme").isSymbolicLink()返回false
  • fs.accessSync("C:\\Programme", fs.F_OK)返回true
  • fs.readdirSync("C:\\Programme")抛出

因此,我发现区分这些文件夹的唯一方法是阅读其内容,这听起来像是对我的资源浪费,如果我想对C:\中的每个目录执行此操作更是如此。

还有其他可靠的方法吗?

1 个答案:

答案 0 :(得分:1)

看到我的评论(这有点猜测结果证明是正确的),我在这里作为实际答案发布,因为没有提供其他答案。

node.js docsfs.realpath方法记录为realpath(3) method的异步版本,其中指出:

  

<强>描述
  realpath()扩展所有符号链接并解析对/./的引用,   /../和以null结尾的字符串中的额外'/'字符   生成规范化绝对路径名的路径。所结果的   pathname存储为以null结尾的字符串,最多为   PATH_MAX字节,在resolved_pa​​th指向的缓冲区中。该   结果路径将没有符号链接,/。/或/../组件。

     

如果resolve_path指定为NULL,则realpath()使用malloc(3)   分配最多PATH_MAX字节的缓冲区来保存已解析的   pathname,并返回指向此缓冲区的指针。来电者应该   使用free(3)释放此缓冲区。

     

返回值
  如果没有错误,则realpath()返回指向的指针   resolved_pa​​th。

     

否则,它返回NULL,数组的内容为resolved_pa​​th   未定义,并且errno设置为指示错误。

换句话说,使用fs.realpath方法返回已解析的路径(实际目录路径),然后与fs.readdir方法返回的路径进行比较。如果值不同,则从fs.readdir返回的路径是“假”路径。

对于OP,fs.realpath返回“ C:\ Program ”,在使用{{{em> C:\ Program “时解析为” C:\ Program Files “ 1}}。

请参阅@CherryDT对O.P.的评论,说明fs.realpath返回false的原因。