2017-07-31 42 views
0

我有一個鏈接到文件和一個實際的文件。我如何檢測它們是否指向相同的物理位置?如何檢測兩個文件條目是否與Qt引用相同的物理文件系統?

#include <unistd.h> 
#include <sys/stat.h> 
#include <sys/types.h> 

bool isSameFileSystem(QString path1, QString path2) 
{ 
    struct stat stat1, stat2; 
    QFileInfo fi1(path1); 
    QFileInfo fi2(path2); 
    stat(fi1.absoluteDir().absolutePath().toUtf8().constData(), &stat1); 
    stat(fi2.absoluteDir().absolutePath().toUtf8().constData(), &stat2); 
    return stat1.st_dev == stat2.st_dev; 
} 

回答

2

有一種方法來檢測指定的文件規範是否是一個符號鏈接規範或真實文件系統對象:

bool point2Same(QString path1, QString path2) 
{ 
    QFileInfo fi1(path1); 
    QFileInfo fi2(path2); 

    QString p1, p2; 
    if (fi1.isSymLink()) 
     p1 = fi1.symLinkTarget(); 
    else 
     p1 = fi1.absolutePath(); 

    if (fi2.isSymLink()) 
     p2 = fi2.symLinkTarget(); 
    else 
     p2 = fi2.absolutePath(); 

    return p1 == p2; 
} 
+0

不過,重複的代碼可以移動到一個單獨的函數。 – vahancho

+0

我不認爲這是一個可靠的解決方案。在'isSymLink'的文檔中,沒有明確提到真正的符號NTFS鏈接。即使象徵性的NTFS鏈接被處理了硬鏈接或連接(掛載的目錄)呢? – bkausbk

+0

那麼,根據http://doc.qt.io/qt-5/qfileinfo.html#isSymLink它讀取Windows上的.lnk文件。 – AlexanderVX

-1

您可以掃描QFileSystemModel,或者是它的子類?這是從指定的根訪問文件系統並訪問其屬性樹的快速方法。

+0

你絕對相信QFileSystemModel是用於什麼? – AlexanderVX

+0

Lol即時閱讀的問題,想知道我現在在想什麼。 – Mike

相關問題