Javascript 如何确保两条路径不';t在节点中引用同一文件夹

Javascript 如何确保两条路径不';t在节点中引用同一文件夹,javascript,node.js,Javascript,Node.js,在Windows上,路径不区分大小写,在Linux上,路径区分大小写 我有一个文件服务器,它提供文件服务,这很好,因为它将根据使用的操作系统提供服务。但我会跟踪某些路径(所有文件夹路径中都有一个特定的文件),并为每个路径加载一个类的新实例。但我的问题是,如果有人使用不区分大小写的操作系统,它将为同一路径加载两个实例,这是不允许的。但我不想只在toLowerCase()上进行比较,因为它们可能在区分大小写的文件系统上 有没有办法使用文件夹统计信息来检查我是否有相同的文件夹?或者其他方式?您可以使用

在Windows上,路径不区分大小写,在Linux上,路径区分大小写

我有一个文件服务器,它提供文件服务,这很好,因为它将根据使用的操作系统提供服务。但我会跟踪某些路径(所有文件夹路径中都有一个特定的文件),并为每个路径加载一个类的新实例。但我的问题是,如果有人使用不区分大小写的操作系统,它将为同一路径加载两个实例,这是不允许的。但我不想只在toLowerCase()上进行比较,因为它们可能在区分大小写的文件系统上


有没有办法使用文件夹统计信息来检查我是否有相同的文件夹?或者其他方式?

您可以使用
fs.stat
获取

对于常规文件,util.inspect(stats)将返回一个非常类似于以下内容的字符串:


我相信
ino
是您的inode编号,它对于您正在讨论的磁盘分区来说应该是唯一的。如果路径指示分区,那么对于特定的路径,您应该是好的。我认为,如果您想处理符号链接和其他文件系统好东西,这可能会很有趣。

如果尚未为不区分大小写的文件系统创建类,那么使用一种返回对现有类或新类的引用的策略如何?对于区分大小写的文件系统,您始终可以创建一个新类。这里您只有两个选择:1)拒绝支持仅大小写不同的名称,首先不允许存在这种情况,然后您可以使用小写进行所有比较,2)检测操作系统是否区分大小写,并仅对不区分大小写的文件系统进行所有小写比较。挑一个。您可以在服务器启动时进行一次区分大小写测试,以了解情况。据我所知,nodejs不提供一些通用文件ID,您可以在两个打开的文件之间进行比较,以查看它们是否相同。您可以打开第一个文件进行独占访问,随后打开同一文件的尝试将失败,并出现相应错误,表明该文件已在使用中。使用stats中的索引节点会很方便,但在Windows上存在不一致的问题。
Stats {
dev: 2114,
ino: 48064969,
mode: 33188,
nlink: 1,
uid: 85,
gid: 100,
rdev: 0,
size: 527,
blksize: 4096,
blocks: 8,
atimeMs: 1318289051000.1,
mtimeMs: 1318289051000.1,
ctimeMs: 1318289051000.1,
birthtimeMs: 1318289051000.1,
atime: Mon, 10 Oct 2011 23:24:11 GMT,
mtime: Mon, 10 Oct 2011 23:24:11 GMT,
ctime: Mon, 10 Oct 2011 23:24:11 GMT,
birthtime: Mon, 10 Oct 2011 23:24:11 GMT }