![](/img/trans.png)
[英]How can I detect if two file entries refer to the same physical file system with Qt?
[英]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等)始終返回構造函數為其設置的路徑,而不是系統上實際存在的名稱。
任何幫助表示贊賞!
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.