在即将发布的Java7中,提供了一个新的API,用于检查两个文件对象是否是相同的文件引用。
.NET框架中是否提供了类似的API?
我已经在MSDN上进行了搜索,但是没有什么启发我的。
我想简单一点,但我不想按文件名进行比较,这会导致硬/符号链接和不同样式的路径出现问题。(例如\\?\C:\,C:\)。
\\?\C:\
C:\
我要做的只是防止重复的文件被拖放到我的链接列表中。
据我所知(1) (2) (3) (4),JDK7的方法是通过在文件上调用GetFileInformationByHandle并比较dwVolumeSerialNumber,nFileIndexHigh和nFileIndexLow。
每个MSDN:
您可以比较BY_HANDLE_FILE_INFORMATION结构中返回的VolumeSerialNumber和FileIndex成员,以确定两个路径是否映射到相同的目标。例如,您可以比较两个文件路径并确定它们是否映射到同一目录。
我不认为此功能由.NET包装,因此您必须使用P / Invoke。
它可能适用于网络文件,也可能不适用于网络文件。根据MSDN:
根据操作系统的基础网络组件和连接的服务器的类型,GetFileInformationByHandle函数可能会失败,返回给定文件的部分信息或完整信息。
快速测试表明,在使用SMB / Samba连接的Linux系统上,该链接在符号链接上可以按预期(相同的值)工作,但是当使用指向同一文件的不同共享访问文件时,它无法检测到文件相同( FileIndex相同,但VolumeSerialNumber不同)。