2011-05-22 39 views
0

我正在開發qt來開發C++代碼的接口,所以我想知道如何檢查用戶從打開的文件打開它的文件類型,因爲程序只接受視頻文件。如果文件是除視頻文件之外的任何內容,我想要顯示錯誤消息。關於打開錯誤文件的錯誤消息

在此先感謝:)

回答

2

文件「類型」只是一個簡化。在現代操作系統上,從操作系統的角度來看,所有的磁盤文件都是相同的(它們只是字節序列),文件的「類型」僅取決於讀取/寫入這些文件的程序。過去,許多操作系統用於區分例如二進制文件和文本文件之間,但那些時間幾乎完全消失。

使文件類型「顯而易見」的常用方法是使用命名約定......即名稱以「.mpg」結尾的文件可能是使用MPEG標準編碼的視頻文件,或者「.txt」文件可能包含人類可讀的文本。

因此,您有兩個選擇...或者您只是根據文件名過濾文件列表(例如,您只接受以「.mp4」,「.mpg」,「.mpeg」,「.avi 「,」.wmv「,」.webm「,」.ogg「... - 只是列舉了一些常見的視頻文件擴展名)或者您只是嘗試將任何文件傳遞給該程序,程序將決定它是否可以播放它與否。如果程序是一個很好的程序,如果它不能理解一個特定的文件格式而不是崩潰,它會優雅地失敗。

請注意,即使您使用的是Qt(便攜式庫),如果接受的視頻文件編碼取決於操作系統甚至是單一安裝(因爲視頻/編解碼器),我也不會感到驚訝編解碼器通常是可能或可能未安裝在系統上的「插件」)。

如果你真的想限制文件名,那麼請記住添加一種方法來選擇一個擴展名不在列表中的文件。每次你在你的程序中列舉一些東西時,你首先會是傲慢的(一個列表意味着你知道所有可能的情況,你認爲你真的這麼做了嗎?),並且你正在爲將來的兼容性設置一個障礙(例如,播放器程序也會處理.wzz視頻文件,但由於允許的擴展名列表中存在一個愚蠢的限制,您的程序將無法播放它們)。

1

你知道你已經可以用類似QFileDialog的東西過濾文件類型了吧?只需看看the documentation,特別是過濾器。有幾個例子。

否則只檢查文件擴展名。

0

比文件擴展名imho更可靠的一點是檢查文件頭。您需要讀取文件的第一個字節(標題),並查看它們是否與您的程序支持的某個視頻容器格式相匹配。

例如,一個windows AVI文件以十六進制字節開始:52 49 46 46(「RIFF」),而MKV文件以1A 45 DF A3開頭(如果我沒記錯的話)。

這當然不能保證你的系統實際上可以播放這樣的文件(這取決於你有合適的編解碼器/過濾器,如果你的文件沒有損壞),但它比檢查擴展名更可靠只是一個任意的名字,並不真正告訴你任何有關文件內部的內容。