如何获取 C++/Qt 格式的文件格式
How to get the file format in C++/Qt
我需要编写一个程序,允许我读取目录中每个文件的名称,以及文件类型。虽然我可以获取文件名,但我无法获得应该如何找到类型。我唯一能想到的就是使用它的元数据,但我什至不确定如何开始。我正在尝试一个独立于操作系统的解决方案,但如果它只适用于 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。
详情链接
- 强制Qt相机视频格式
- 需要有关使用 Visual Studio 17 将 QT 桌面应用程序打包为 AppX 格式的指导
- QT 标签 setText() 同时保留文本格式
- 如何在Qt中打印.xlsx格式
- 以Qt格式捕获音频信号
- Qt解析自定义文件格式
- 为什么我在有关文件编码格式的QT代码中获得了混乱的代码
- 使用文本格式来记录QT
- 检查leandit输入是否具有正确的格式QT 5 C
- 如何获取 C++/Qt 格式的文件格式
- Qt C++ 如何将加密文本的QByteArray保存到文件中,然后读取并格式化为QByteArray
- QT显示双重号码,没有指数格式
- 如何在QT中读取GPX文件(xml格式)
- Qt:模型/视图-定义项目持有日期的格式
- 错误:主格式为0(libsndfile,Qt)
- Qt - 以 mmmm YYYY 格式获取当前日期(作为字符串)
- 如何静态链接WebKit的Qt图像格式插件
- 在 C++/Qt 中以文本格式序列化数据结构
- 使用iomanip将数据输出格式化为具有Qt的文本文件
- Qt ActiveX QAxObject格式Excel单元格注释