我正在用C编写程序,我需要知道文件的mime类型。
我还在谷歌搜索过,我发现I must include the 'file' UNIX utility in my project。
file
的源代码需要configure
和make
。我如何在我的项目中包含这个?我是否必须将部分源代码裁剪为新的file.c
和file.h
?
答案 0 :(得分:6)
您想根据扩展程序猜测MIME类型,还是执行file
之类的操作并检查标题?
要获得与file
类似的功能,您无需在项目中包含file
。相反,你会想要使用file
基于的libmagic。不幸的是,我不知道这方面有很好的文档来源,但它非常简单。
magic_t magic = magic_open(MAGIC_MIME_TYPE);
magic_load(magic, NULL);
char *mime_type = magic_file(magic, "/path/to/file");
magic_close(magic);
答案 1 :(得分:0)
感谢您的回答和评论。
我解决了这个问题:
const char *w_get_mime(const char *arg, const char *file, int line_no)
{
const char *magic_full;
magic_t magic_cookie;
if(arg == NULL)
w_report_error("called with NULL argument.",file,line_no,__func__,0,1,error);
else if ((magic_cookie = magic_open(MAGIC_MIME) ) == NULL)
report_error("unable to initialize magic library.",0,1,error);
else if (magic_load(magic_cookie, NULL) != 0)
{
magic_close(magic_cookie);
snprintf(globals.err_buff,MAX_BUFF,"cannot load magic database - %s .",magic_error(magic_cookie));
report_error(globals.err_buff,0,1,error);
}
magic_full = magic_file(magic_cookie, arg);
magic_close(magic_cookie);
return magic_full;
}
非常感谢! :)