如何在C++/Qt中获取文件格式

alu*_*wan -2 c++ qt file

我需要编写一个程序,允许我读取目录中每个文件的名称,以及文件的类型.虽然我可以获取文件名,但我无法得到我应该如何找到该类型.我唯一能想到的就是使用它的元数据,但我甚至不确定如何开始使用它.我正在尝试一个独立于操作系统的解决方案,但如果它仅适用于Windows或Linux,我会很高兴.

注意:请不要提供涉及搜索点的解决方案,以及介于两者之间的任何内容.这些天,几乎没有文件.pdf附加或附加任何文件.当你阅读文件名时,你得到的只是sample,而不是sample.txt.

另外,如果它与Qt不兼容,我会很感激,如果你能在答案中提到这一点,那么我可以采取适当的行动(因为GUI我正在研究Qt).

kef*_*500 9

文件扩展名

作为@CMLDMR指出,QFileInfo::suffix()QFileInfo::completeSuffix()方法将返回文件扩展名.但是,文件扩展名可能会被省略,无效,未知等.

所以,根据你的实际问题,你想知道的文件格式,而不是它的扩展名,如所陈述的第一次修订.

文件格式

Qt 5有一节课QMimeDatabase.它允许您通过其内容发现文件MIME类型.假设我们有一个mpeg没有扩展名的音乐文件:

QMimeDatabase db;
QMimeType mime = db.mimeTypeForFile("C:/music", QMimeDatabase::MatchContent);
qDebug() << mime.name();            // Name of the MIME type ("audio/mpeg").
qDebug() << mime.suffixes();        // Known suffixes for this MIME type ("mp3", "mpga").
qDebug() << mime.preferredSuffix(); // Preferred suffix for this MIME type ("mp3").
Run Code Online (Sandbox Code Playgroud)

文件扩展名+文件格式

如果您仍希望优先考虑文件扩展名并仅在后缀存在时解析文件内容,请省略QMimeDatabase::MatchContent参数 - QMimeDatabase::MatchDefault将使用默认值.请参阅QMimeDatabase::MatchMode更多信息.


请注意,Qt对不同的操作系统使用不同的MIME数据库,因此结果可能会有所不同.


小智 6

QFileInfo fi("/tmp/archive.tar.gz");
QString ext = fi.suffix();  // ext = "gz"
Run Code Online (Sandbox Code Playgroud)

后缀功能是给你一个文件扩展名。

或者

QFileInfo fi("/tmp/archive.tar.gz");
QString ext = fi.completeSuffix();  // ext = "tar.gz"
Run Code Online (Sandbox Code Playgroud)

您可以使用其他任何一种适合您的方式。此代码独立但 Qt。

详情链接