1

有什么“好”的方法来区分电影文件和图像文件吗?我想知道我的“std::wstring filePath”到底是什么——电影或图像。因此,我可以在使用已知文件类型的情况下更进一步。

换句话说,我有两个类MyImageMyMovie在它们的构造函数中都需要文件路径。我想在创建这些类之一之前以某种方式验证文件的路径。

bool isMovie(const std::wstring & filePath);
bool isImage(const std::wstring & filePath);

当然我考虑过文件扩展名,但我不确定它是否良好且不易出错的解决方案。那么使用文件扩展名或任何其他可行的解决方案是否可行。?

提前致谢

4

2 回答 2

3

您可以使用libmagic来检测它是什么类型的文件。您传入文件路径,它会为您提供文件的文本描述或 MIME 类型。

于 2013-07-25T10:40:37.483 回答
1

通常文件有特殊的所谓的魔术字节。我可以控制我将使用它的规范。如果您尝试打开 zip、gif 或其他二进制文件,您通常可以在那里找到一些独特的字符串。

有一个称为file提供此类功能的 unix 工具实用程序,因此可能存在某种标准。

SQLite 3 提供了一个很好的例子。查看1.2.11.2.5。因此,不仅给出了它是 SQLite 3 DB 的信息,而且还给出了附加的应用程序 ID,因此其他工具可以识别它是哪个应用程序的 DB。

当我玩二进制文件时,我个人使用文件的几个第一个字节来为我的文件编码类型和版本信息。

于 2013-07-25T10:42:51.963 回答