簡體   English   中英

如何找出兩個文件名是否引用同一個文件

[英]how to find out if two filenames refer to the same file

這是有關如何使用Qt的問題。 我有兩個路徑,讓我們說“ c:\\ users \\ herbie \\ stuff \\ file1.txt”和“ c:\\ users \\ HERBIE \\ stuff \\ file1.txt”。

我想寫一個方法來告訴我這兩個路徑是否指向同一個文件。 該方法應在Windows和Linux下工作。 因此,我認為可以使用Qt類來解決此問題,但是我還沒有找到解決方法。

Windows不區分大小寫,因此在Windows上這兩個是指同一個文件。 在Linux上,它們將引用不同的文件。

有人知道怎么做這個嗎? 字符串比較不起作用(由於區分大小寫),並且Qt類(如QFileInfo,QDir等)始終返回構造函數為其設置的路徑,而不是系統上實際存在的名稱。

任何幫助表示贊賞!

編輯

最好看一下boost::filesystem::equivalent :)

如果sf1 == sf2且p1和p2解析為同一文件系統實體,則返回true,否則返回false。

QFileInfo::operator==定義為如果兩個路徑引用同一個文件,則返回true ,除非(A)一個是Windows 8.3的“短”名稱,另一個是它的“長”名稱,或者(B)當一個是Windows 8.3。到另一個的符號鏈接。 這兩個例外均不適用。

您需要使用#ifdef編寫特定於操作系統的代碼。 如果您在Windows上運行,請將路徑轉換為大寫並進行比較。 如果您使用的是Linux,則按原樣進行比較。 每個操作系統上都有一些可以使用的預定義宏。

您可以從此處使用列表: http : //sourceforge.net/p/predef/wiki/OperatingSystems/

這樣,您的代碼將類似於:

#ifdef __WINDOWS__
// do case-insensitive compare
#else
// do case-sensitive compare 

如何獲得正確的路徑大小寫? 問類似的問題。

Slomojo的解決方案有些破綻,但似乎無法解決。

沒有簡單的方法可以執行此操作,但是您可以嘗試執行QDir.entryList ,然后對結果進行不區分大小寫的搜索。 這將為您提供正確的文件名。 然后,您需要獲取該結果的absolutePath

這應該為您保留路徑/文件名的大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM