我正在開發qt來開發C++代碼的接口,所以我想知道如何檢查用戶從打開的文件打開它的文件類型,因爲程序只接受視頻文件。如果文件是除視頻文件之外的任何內容,我想要顯示錯誤消息。關於打開錯誤文件的錯誤消息
在此先感謝:)
我正在開發qt來開發C++代碼的接口,所以我想知道如何檢查用戶從打開的文件打開它的文件類型,因爲程序只接受視頻文件。如果文件是除視頻文件之外的任何內容,我想要顯示錯誤消息。關於打開錯誤文件的錯誤消息
在此先感謝:)
文件「類型」只是一個簡化。在現代操作系統上,從操作系統的角度來看,所有的磁盤文件都是相同的(它們只是字節序列),文件的「類型」僅取決於讀取/寫入這些文件的程序。過去,許多操作系統用於區分例如二進制文件和文本文件之間,但那些時間幾乎完全消失。
使文件類型「顯而易見」的常用方法是使用命名約定......即名稱以「.mpg」結尾的文件可能是使用MPEG標準編碼的視頻文件,或者「.txt」文件可能包含人類可讀的文本。
因此,您有兩個選擇...或者您只是根據文件名過濾文件列表(例如,您只接受以「.mp4」,「.mpg」,「.mpeg」,「.avi 「,」.wmv「,」.webm「,」.ogg「... - 只是列舉了一些常見的視頻文件擴展名)或者您只是嘗試將任何文件傳遞給該程序,程序將決定它是否可以播放它與否。如果程序是一個很好的程序,如果它不能理解一個特定的文件格式而不是崩潰,它會優雅地失敗。
請注意,即使您使用的是Qt(便攜式庫),如果接受的視頻文件編碼取決於操作系統甚至是單一安裝(因爲視頻/編解碼器),我也不會感到驚訝編解碼器通常是可能或可能未安裝在系統上的「插件」)。
如果你真的想限制文件名,那麼請記住添加一種方法來選擇一個擴展名不在列表中的文件。每次你在你的程序中列舉一些東西時,你首先會是傲慢的(一個列表意味着你知道所有可能的情況,你認爲你真的這麼做了嗎?),並且你正在爲將來的兼容性設置一個障礙(例如,播放器程序也會處理.wzz視頻文件,但由於允許的擴展名列表中存在一個愚蠢的限制,您的程序將無法播放它們)。
你知道你已經可以用類似QFileDialog的東西過濾文件類型了吧?只需看看the documentation,特別是過濾器。有幾個例子。
否則只檢查文件擴展名。
比文件擴展名imho更可靠的一點是檢查文件頭。您需要讀取文件的第一個字節(標題),並查看它們是否與您的程序支持的某個視頻容器格式相匹配。
例如,一個windows AVI文件以十六進制字節開始:52 49 46 46(「RIFF」),而MKV文件以1A 45 DF A3開頭(如果我沒記錯的話)。
這當然不能保證你的系統實際上可以播放這樣的文件(這取決於你有合適的編解碼器/過濾器,如果你的文件沒有損壞),但它比檢查擴展名更可靠只是一個任意的名字,並不真正告訴你任何有關文件內部的內容。