使用node.js区分真实的Windows目录和“向后兼容的”目录

我的(德语)Windows 10上的fs.readdir()方法列出了“Program”作为C:\一个目录。

这当然是链接到C:\Program Files的着名的“假”目录(就像C:\Documents and Settings ),以保持为在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:\每个目录执行此操作,则更是如此。

有没有其他可靠的方法来做到这一点?

看到我的评论(这是一个猜测结果是正确的),我在这里张贴作为实际的答案,因为没有提供其他答案。

node.js文档将fs.realpath方法记录为realpath(3)方法的异步版本,其中规定:

说明
realpath()展开所有符号链接,并解析对由path指定的以null结尾的字符串中的/./,/../和额外的“/”字符的引用,以生成规范化的绝对​​路径名。 生成的路径名存储为由resolved_pa​​th指向的缓冲区中以空字符结尾的字符串,最大为PATH_MAX字节。 得到的路径将没有符号链接,/./或/../组件。

如果resolved_pa​​th指定为NULL,则realpath()将使用malloc(3)分配高达PATH_MAX字节的缓冲区以保存已解析的路径名,并返回指向此缓冲区的指针。 调用者应该使用free(3)释放这个缓冲区。

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

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

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

在OP的情况下,当使用fs.realpath时, fs.realpath返回解析为“ C:\ Program Files ”的“ C:\ Program ”。

请参阅@CherryDT给OP的评论,说明为什么isSymbolicLink返回false。