打开错误文件的错误消息[关闭]

Posted

技术标签:

【中文标题】打开错误文件的错误消息[关闭]【英文标题】:error message for open wrong file [closed] 【发布时间】:2011-05-22 10:11:16 【问题描述】:

我正在使用 qt 为 c++ 代码开发接口,所以我想知道如何检查用户从打开的文件中打开它的文件类型,因为程序只接受视频文件。如果文件不是视频文件,我想显示错误消息。

在此先感谢 :)

【问题讨论】:

【参考方案1】:

文件“类型”只是一个简化。在现代操作系统上,从操作系统的角度来看,所有磁盘文件都是平等的(它们只是字节序列),文件的“类型”仅取决于读取/写入这些文件的程序。过去,许多操作系统用于区分,例如在二进制文件和文本文件之间,但那些时间几乎完全消失了。

使文件类型“明显”的一种常用方法是使用命名约定...即,名称以“.mpg”结尾的文件可能是使用 MPEG 标准编码的视频文件,或者是“ .txt" 文件可能包含人类可读的文本。

因此,您有两个选择...或者您只是根据文件名过滤文件列表(例如,您只接受以“.mp4”、“.mpg”、“.mpeg”、“.avi”结尾的文件, ".wmv", ".webm", ".ogg" ... - 仅举几个常见的视频文件扩展名),或者您只是尝试将任何文件传递给程序,程序将决定它是否可以播放或不。如果程序是一个好的程序,如果它不能理解特定的文件格式而不是崩溃,它会优雅地失败。

请注意,即使您使用的是 Qt(便携式库),如果接受的视频文件编码取决于操作系统,甚至取决于单个安装(因为视频/编解码器编解码器),我也不会感到惊讶通常是“插件”,可能已安装或未安装在系统上)。

如果您真的想限制文件名,请记住添加一种方法来选择扩展名不在您列表中的文件。每次你在你的程序中列举事物时,你首先是有点自大(一个列表意味着你知道所有可能的情况,你认为你真的知道吗?)并且你正在为未来的兼容性设置障碍(例如下一个版本的播放器程序也将处理 .wzz 视频文件,但由于允许的扩展名列表中存在愚蠢的限制,您的程序将无法播放它们。

【讨论】:

【参考方案2】:

您确实意识到您已经可以使用 QFileDialog 之类的东西过滤文件类型,对吧?看看the documentation,尤其是过滤器。有几个例子。

否则只需检查文件扩展名。

【讨论】:

【参考方案3】:

比文件扩展名更可靠的是检查文件头。您需要读取文件的第一个字节(标题)并查看它们是否与您的程序支持的视频容器格式之一匹配。

例如,Windows AVI 文件以十六进制字节开头:52 49 46 46(“RIFF”),而 MKV 文件以 1A 45 DF A3 开头(如果我没记错的话)。

这当然不能保证您的系统确实可以播放此类文件(这取决于您是否有正确的编解码器/过滤器以及您的文件是否损坏),但它比检查扩展名更可靠,即只是一个任意名称,并不能真正告诉您文件中的实际内容。

【讨论】:

以上是关于打开错误文件的错误消息[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Firebird - 数据库文件关闭错误消息

关闭定位服务时出现“发生错误”消息

从会话中获取文件时出现“无法访问已关闭的文件”错误消息

Powershell 3.0:保存工作脚本后,如果我关闭然后重新打开脚本,当我尝试运行它时会收到一条错误消息

WinSCP:权限被拒绝。错误代码:3来自服务器的错误消息:权限被拒绝[关闭]

Pyinstaller 可执行文件打开并立即关闭