有没有“好”的方法来区分电影文件和图像文件? 我想知道我的“std :: wstring filePath”到底是什么 - 电影或图像。 因此,我可以进一步坚定地保证我正在处理已知的文件类型。
换句话说,我有两个类 MyImage 和 MyMovie 都需要在其构造函数中提供文件路径。我想在创建其中一个类之前以某种方式验证文件路径。
bool isMovie(const std::wstring & filePath);
bool isImage(const std::wstring & filePath);
当然我考虑过文件扩展名,但我不确定它是否合适并且不容易出错。因此,使用文件扩展名或任何其他可行的解决方案是可行的。?
提前致谢
答案 0 :(得分:3)
您可以使用libmagic来检测它是什么类型的文件。您传入文件路径,它将为您提供文件的文本描述或MIME类型。
答案 1 :(得分:1)
通常文件具有特殊的所谓魔术字节。我可以控制规范,我会用它。如果您尝试打开zip,gif或其他二进制文件,通常可以在那里找到一些独特的字符串。
有一个名为file
的unix工具实用程序提供了这样的功能,因此可能存在某种标准。
SQLite 3提供nice example。请看 1.2.1 和 1.2.5 。因此,不仅给出了它是SQLite 3 DB的信息,而且还提供了额外的应用程序ID,因此其他工具可以识别它是哪个应用程序的数据库。
当我玩二进制文件时,我个人使用文件的几个第一个字节来编码我的文件的类型和版本信息。