2014-01-17 31 views
0

我需要一些方法來確定文件是否以某種擴展名ex:(rar,tar,tar.gz等)壓縮,它使用的是Linux系統下的C/C++語言。 我讀了一些關於stat和S_IFCMP的內容,但是我不能在linux中使用它,所以,你可以幫我一些替代方法嗎?如何檢查文件是否被壓縮?

+0

S_IFCMP不會告訴你一個文件是否被壓縮,它是關於被壓縮的文件系統,這是一個非常不同的情況。 – Devolus

+6

您可以使用'文件'命令,或建立自己的。一般而言,您只需要檢查針對libmagic的前幾個字節,或者您可以信任擴展......這不是很安全。 –

回答

5

有沒有防彈的方式來確定這一點。你可以檢查擴展名。如果您不信任擴展名,那麼您必須查看該文件並檢查簽名。

你可以找到其中一些here

stat的調用不會告訴您有關單個文件被壓縮的情況,因爲此標誌表示文件系統已壓縮。

0

下面是你可以做的一個小而簡單的例子。您只需檢查文件路徑的字符串,並查看最後幾個字符是否適合它。

//You could set this to anything 
std::string filePath = "hello.rar"; 

if ((filePath.back() - 2 == "r") && (filePath.back() - 1 == "a") && (filePath.back() == "r")) 
    std::cout << "The file is a .rar" << std::endl; 

我希望有幫助!

(P.S,如果你正在尋找一個安全的方法來檢查,這絕對不是你想採取的路徑。)

+0

'filePath.back() - 2'沒有做你認爲的事情。在downvote之前更好地糾正。 –

+0

使用'std :: string :: substr()'將文件擴展名提取到另一個'str :: string',然後比較它,或者使用'std :: string :: compare()'開始位置從結尾開始是4個字符(在比較中應該包括'.'來解釋文件擴展名> 3個字符的長度)。 –

相關問題