私はqtでc ++コードのインターフェイスを開発しています。プログラムがビデオファイルのみを受け入れるため、ユーザーが開いているファイルから開くファイルタイプを確認する方法を知りたいです。ファイルが動画ファイル以外の場合にエラー メッセージを表示したい。
前もって感謝します :)
私はqtでc ++コードのインターフェイスを開発しています。プログラムがビデオファイルのみを受け入れるため、ユーザーが開いているファイルから開くファイルタイプを確認する方法を知りたいです。ファイルが動画ファイル以外の場合にエラー メッセージを表示したい。
前もって感謝します :)
ファイルの「タイプ」は単純化したものです。最新のオペレーティング システムでは、すべてのディスク ファイルは OS の観点からは等しく (それらは単なるバイトのシーケンスです)、ファイルの「タイプ」は、それらのファイルを読み書きするプログラムにのみ依存します。過去には、多くのオペレーティング システムが、たとえばバイナリ ファイルとテキスト ファイルを区別していましたが、そのような時代はほぼ完全になくなりました。
ファイルの種類を「明白」にするための一般的な方法は、命名規則を使用することです。つまり、「.mpg」で終わる名前のファイルは、おそらく MPEG 標準を使用してエンコードされたビデオ ファイル、または「.txt」です。ファイルには、人間が判読できるテキストが含まれている可能性があります。
したがって、2 つのオプションがあります... ファイル名に応じてファイル リストをフィルタリングするだけです (たとえば、".mp4"、".mpg"、".mpeg"、".avi"、". wmv"、".webm"、".ogg" ... - 一般的なビデオ ファイルの拡張子をいくつか挙げるだけです) または、任意のファイルをプログラムに渡そうとすると、プログラムが再生できるかどうかを判断します。プログラムが優れている場合、特定のファイル形式を理解できない場合は、単にクラッシュするのではなく、適切に失敗します。
Qt (ポータブル ライブラリ) を使用している場合でも、受け入れられるビデオ ファイルのエンコーディングがオペレーティング システムや単一のインストールに依存していても驚かないことに注意してください (ビデオ/コーデック コーデックはしばしば "プラグイン」は、システムにインストールされている場合とインストールされていない場合があります)。
ファイル名を本当に制限したい場合は、リストにない拡張子を持つファイルを選択する方法を追加することを忘れないでください。プログラムで何かを列挙するたびに、まず第一に傲慢であり (リストは、考えられるすべてのケースを知っていることを意味しますが、本当に知っていると思いますか?)、将来の互換性に障害を置いています (たとえば、次のバージョンのプレーヤー プログラムは .wzz ビデオ ファイルも処理しますが、許可されている拡張子のリストに愚かな制限があるため、プログラムはそれらを再生できません)。
QFileDialog のようなものを使用して、ファイルの種類を既にフィルター処理できることを認識していますよね? ドキュメントと特にフィルターを見てください。いくつかの例があります。
それ以外の場合は、ファイル拡張子を確認してください。
ファイル拡張子のimhoよりも少し信頼できるのは、ファイルヘッダーをチェックすることです。ファイルの最初のバイト (ヘッダー) を読み取り、プログラムがサポートするビデオ コンテナー形式のいずれかと一致するかどうかを確認する必要があります。
たとえば、Windows AVI ファイルは 16 進バイト 52 49 46 46 ("RIFF") で始まりますが、MKV ファイルは 1A 45 DF A3 (私の記憶が正しければ) で始まります。
もちろん、これはシステムがそのようなファイルを実際に再生できることを保証するものではありません (適切なコーデック/フィルターを使用しているかどうか、およびファイルが破損していないかどうかによって異なります)。ファイルの実際の内容について何も教えてくれない名前です。