开发者

Find out the mime type and associated applications with Qt

How can I find out a mime-type or content-type of a given file? I cannot use the suffix because the file could be renamed.

Possible additions would be categorizing them as jpg, gif, png and so on are image files and can be opened by editing applications, which has been set in the OS.

开发者_开发问答

Thank you in advance.


What platform? On *nix, you should refer to how the program file does it, which is based on a few heuristics including checks of the first few bytes of a file (many file formats start with a fixed header, including many image formats).

If you're on Windows, the *nix file command is probably still instructive, even if you can't reuse its code as directly. There may also be some better solution in the Windows APIs (I'm not a Windows programmer).


This could help, it is with C# but I think you can get the idea.

http://kseesharp.blogspot.com/2008/04/c-get-mimetype-from-file-name.html

You can use some sort of class for acccesing Windows Registry from qt or using the Windows API directly from qt.

I am not a qt programmer.


You can't, not from within Qt.

However, if all you want is to show a file with the correct application, you can use QDesktopServices::openUrl(), which wraps open (Windows/OSX) and xdg-open (Unix). The URL may also be a local file (in that case, use QUrl::fromLocalFile() to construct the URL).


For categorizing image files. For Qt and just only for image files.

QByteArray imageFormat = QImageReader::imageFormat(fileName); //Where fileName - path to your file

Further mapping imageFormat to mime-type is not complicable


It doesn't look like Qt offers that capability yet. However, you may want to look into the libmagic library which does what the file and other similar commands do. Assuming the library is maintained properly it will include new MIME types as time passes. From what I can tell it is part of the file tool suite. Under a Debian system do something like this:

sudo apt-get install libmagic-dev

to get the development library and use #include to make use of it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜