在寻找一种检测文件流的文件类型的方法之后,我发现 Unix文件命令使用 libmagic,我试图自己使用该库,但我无法让它工作。我很少在自己的代码中集成第三方代码,所以这可能也是我的问题的一个重要部分。
Why:
我这样做是因为我有一个便携式 GUI 图像查看应用程序,需要从给定的文件名中检测存档文件类型(rar、zip,更多?),然后检测其中的图像文件类型。我希望我可以在 Windows 和 Linux(以及 Mac)上使用 libmagic,所以如果情况并非如此,请立即阻止我,因为我需要找到其他东西。
Attempt:
I found 有人做类似的事情,但我无法理解他们在做什么,而且我根本不知道如何编译/运行任何东西来开始搞乱。
我的第一直觉是做类似的事情:
// fileTypeTest.cpp, placed in file-5.03/src/ (source from link above)
#include <stdio.h>
#include "magic.h"
int main() {
magic_t myt = magic_open(MAGIC_CONTINUE|MAGIC_ERROR/*|MAGIC_DEBUG*/|MAGIC_MIME);
magic_load(myt,NULL);
printf("magic output: '%s'\n",magic_file(myt,__FILE__));
magic_close(myt);
return 0;
}
然后用类似的东西编译:
$ gcc magic.c -o magic.o
$ g++ fileTypeTest.cpp -o fileTypeTest magic.o
这(显然?)不起作用。我什至不知道从哪里开始寻找,要问什么问题,或者这是否是解决我最初问题的正确方向。
编辑:现在我有
#include <stdio.h>
#include <magic.h>
int main(int argc, char* argv[]) {
if (argc != 2) {
printf("bad arguments");
return 0;
}
magic_t myt = magic_open(MAGIC_CONTINUE|MAGIC_ERROR/*|MAGIC_DEBUG*/|MAGIC_MIME);
magic_load(myt,NULL);
printf("magic output: '%s'\n", magic_file(myt, argv[1]));
magic_close(myt);
return 0;
}
编译:
$ g++ -L/usr/lib -libmagic fileTypeTest.cpp -o fileTypeTest
作品。不过,我必须去 synaptic 并安装 libmagic-dev 。我必须测试一下在 Windows 的 MingW 上编译我的应用程序时是否可以将 /usr/lib/libmagic.a 复制到我的源目录中,但我想这将是稍后的另一个问题。