在 C# 中比较两条路径。什么时候使用区分大小写?
Comparing two paths in C#. When do I use case-sensitivity?
我目前正在编写一个编译器,我有一个小的 class 循环输入文件并比较它们以查看是否没有重复的文件。当然,我们不能直接比较字符串,因为同一个文件可以这样写,比方说,main.c
和 ./main.c
。因此,我使用 System.IO.Path.GetFullPath()
来比较文件路径。问题是在 Windows 上,文件系统不区分大小写,因此,例如 "C:/main.c" == "C:/Main.c"
,但是在像 Linux、Mac 或 [=16 这样的 *NIX 系统上=],这两个可能是不同的文件。此外,*NIX 还支持 FAT 和 FAT32 等文件系统,它们的工作方式与 Windows' 类似。我怎么知道什么时候应该比较两个路径是否区分大小写,这样我就可以确定这两个文件路径是否相等?
可以调用ShellAPI函数SHParseDisplayName,然后调用SHGetDesktopFolder返回的IShellFolder接口的CompareIDs方法。
如果可以放弃 XP 支持,则可以使用 Microsoft 的 Windows-API-Code-Pack。 Microsoft.WindowsAPICodePack.Shell.ShellObject.Equals 会进行比较。
我目前正在编写一个编译器,我有一个小的 class 循环输入文件并比较它们以查看是否没有重复的文件。当然,我们不能直接比较字符串,因为同一个文件可以这样写,比方说,main.c
和 ./main.c
。因此,我使用 System.IO.Path.GetFullPath()
来比较文件路径。问题是在 Windows 上,文件系统不区分大小写,因此,例如 "C:/main.c" == "C:/Main.c"
,但是在像 Linux、Mac 或 [=16 这样的 *NIX 系统上=],这两个可能是不同的文件。此外,*NIX 还支持 FAT 和 FAT32 等文件系统,它们的工作方式与 Windows' 类似。我怎么知道什么时候应该比较两个路径是否区分大小写,这样我就可以确定这两个文件路径是否相等?
可以调用ShellAPI函数SHParseDisplayName,然后调用SHGetDesktopFolder返回的IShellFolder接口的CompareIDs方法。
如果可以放弃 XP 支持,则可以使用 Microsoft 的 Windows-API-Code-Pack。 Microsoft.WindowsAPICodePack.Shell.ShellObject.Equals 会进行比较。