这是一个关于如何使用Qt的问题。 我有两条路径,让我们说“c:\ users \ herbie \ stuff \ file1.txt”和“c:\ users \ HERBIE \ stuff \ file1.txt”。
我想写一个方法会告诉我这两个路径是否引用同一个文件。这个方法应该在windows和linux下工作。因此我认为Qt类可以用来解决这个问题,但我还没有找到如何做到这一点。
Windows不区分大小写,所以在Windows上这两个引用同一个文件。在linux上,他们会引用不同的文件。
有人知道怎么做吗?字符串比较不起作用(因为区分大小写)和Qt类(如QFileInfo,QDir等)总是按构造函数的方式返回路径,而不是系统上实际存在的名称。
感谢任何帮助!
答案 0 :(得分:4)
答案 1 :(得分:0)
您需要使用#ifdef
编写特定于操作系统的代码。如果您在Windows上运行,请将路径转换为大写,然后进行比较。如果您使用的是Linux,请按原样进行比较。您可以使用每个操作系统上的一些预定义宏。
您可以使用此处的列表:http://sourceforge.net/p/predef/wiki/OperatingSystems/
有了这个,您的代码将类似于:
#ifdef __WINDOWS__
// do case-insensitive compare
#else
// do case-sensitive compare
答案 2 :(得分:0)
How do I get the correct case of a path?提出了类似的问题。
Slomojo的解决方案有点像黑客攻击,但似乎无法绕过它。
没有一种简单的方法可以做到这一点,但你可以尝试做一个
QDir.entryList
,然后对结果进行不区分大小写的搜索。 这将为您提供正确的文件名。然后你需要 获得该结果的absolutePath
。这应该为您提供路径/文件名的保留大小。
答案 3 :(得分:0)
QFileInfo::operator==
被定义为返回true
,除非(A)一个是Windows 8.3“短”名称而另一个是其“长”名称或(B)当一个是另一个的象征性链接时。这两个例外都不适用。