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

How to get the file format in C++/Qt

本文关键字:格式 Qt 文件 C++ 何获取 获取      更新时间:2023-10-16

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

注意:请不要给出涉及搜索点以及介于两者之间的任何内容的解决方案。如今,几乎没有文件附有.pdf或附加的东西。当您读取文件名时,您得到的只是 sample ,而不是sample.txt

另外,如果它与Qt不兼容,如果您能在回答中提及这一点,我将不胜感激,以便我可以采取适当的行动(由于GUI,我正在研究Qt)。

文件扩展名

正如@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").

文件扩展名 + 文件格式

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


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

QFileInfo fi("/tmp/archive.tar.gz");
QString ext = fi.suffix();  // ext = "gz"

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

QFileInfo fi("/tmp/archive.tar.gz");
QString ext = fi.completeSuffix();  // ext = "tar.gz"

您可以相互使用哪一个适合您。此代码独立但 Qt。

详情链接