Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
区分真正的Windows目录和;“向后兼容性”;有node.js的_Node.js_Windows - Fatal编程技术网

区分真正的Windows目录和;“向后兼容性”;有node.js的

区分真正的Windows目录和;“向后兼容性”;有node.js的,node.js,windows,Node.js,Windows,my(德语)Windows 10上的fs.readdir()方法将“程序”列为C:\中的目录 当然,这是一个著名的“假”目录(就像C:\Documents and Settings)链接到C:\Program Files,以保持在Windows XP下安装的程序的向后兼容性 问题是我无法区分这种目录和“真实”目录 fs.statsSync(“C:\\Program”).isDirectory()返回true fs.statsSync(“C:\\Program”).isSymbolicLink(

my(德语)Windows 10上的
fs.readdir()
方法将“程序”列为
C:\
中的目录

当然,这是一个著名的“假”目录(就像
C:\Documents and Settings
)链接到
C:\Program Files
,以保持在Windows XP下安装的程序的向后兼容性

问题是我无法区分这种目录和“真实”目录

  • fs.statsSync(“C:\\Program”).isDirectory()
    返回
    true
  • fs.statsSync(“C:\\Program”).isSymbolicLink()
    返回
    false
  • fs.accessSync(“C:\\program”,fs.F\u OK)
    返回
    true
  • fs.readdirSync(“C:\\Program”)
因此,我发现区分这些文件夹的唯一方法是读取它们的内容,这听起来像是在浪费资源,如果我想对
C:\
中的每个目录都这样做的话,更是如此

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

鉴于我的评论(这是一个猜测,后来证明是正确的),我在这里发布了实际答案,因为没有提供其他答案

该文档将该方法作为的异步版本,其中说明:

说明
realpath()展开所有符号链接并解析对/、的引用, /../和名为的以null结尾的字符串中的额外“/”字符 生成规范化绝对路径名的路径。结果 路径名存储为以null结尾的字符串,最大值为 PATH_最大字节,在解析的_路径指向的缓冲区中。这个 结果路径将没有符号链接、//或//组件

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

返回值
如果没有错误,realpath()将返回指向 解析路径

否则,它将返回NULL,即数组的内容解析的路径 未定义,并且设置了errno以指示错误

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

对于O.p.,
fs.realpath
返回“C:\Program”,使用
fs.realpath
时解析为“C:\Program Files”


请参阅@CherryDT对O.p.的评论,其中描述了为什么
isSymbolicLink
返回false。

查看node.js文档,会返回特殊目录名的实际路径吗?而实际路径与输入路径(特殊目录名)的比较可以确定输入路径是否是实际路径(?)。哇,这出乎意料地简单。没错,
realpath()
在本例中返回
C:\Program Files
,因此可以进行区分。我甚至没有想过将它应用于非相对路径。非常感谢。
isSymbolicLink
之所以为false,是因为它实际上不是符号链接,而是一个连接点(使用
dir/ac:\
时可以看到)。它的工作方式是将目录设置为与真实目录的连接点,但连接点自身获得隐藏属性并获得ACL集,该ACL集允许任何人访问目录(仅访问目录中的内容)。这意味着您可以使用
dir c:\program\internetexplorer
,但不能使用
dir c:\program
——这将防止用户使用假目录,但允许访问“错误”路径的内容“很明显。是的,我知道这实际上不是他们用来实现此功能的符号链接,但我找不到实际使用的技术。谢谢你的解释!