我(德语)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:\
中的每个目录执行此操作更是如此。
还有其他可靠的方法吗?
答案 0 :(得分:1)
看到我的评论(这有点猜测结果证明是正确的),我在这里作为实际答案发布,因为没有提供其他答案。
node.js docs将fs.realpath方法记录为realpath(3) method的异步版本,其中指出:
<强>描述强>:
realpath()扩展所有符号链接并解析对/./的引用, /../和以null结尾的字符串中的额外'/'字符 生成规范化绝对路径名的路径。所结果的 pathname存储为以null结尾的字符串,最多为 PATH_MAX字节,在resolved_path指向的缓冲区中。该 结果路径将没有符号链接,/。/或/../组件。如果resolve_path指定为NULL,则realpath()使用malloc(3) 分配最多PATH_MAX字节的缓冲区来保存已解析的 pathname,并返回指向此缓冲区的指针。来电者应该 使用free(3)释放此缓冲区。
返回值
如果没有错误,则realpath()返回指向的指针 resolved_path。否则,它返回NULL,数组的内容为resolved_path 未定义,并且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的原因。