首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c 语言 获取文件类型解决办法

2013-12-15 
c 语言 获取文件类型利用C 或者是windows 的API实现度文件的类型进行判定,如aha.txt 可以判别为文本文档。。

c 语言 获取文件类型
利用C 或者是windows 的API实现度文件的类型进行判定,如aha.txt 可以判别为文本文档。。。
[解决办法]
不得而知。一切皆为文件。windows下是否判断后缀名就可以了?
[解决办法]
根据文件扩展名,查询注册表HKEY_CLASSES_ROOT
[解决办法]
文件头中有类型信息
[解决办法]
仅供参考

#include <stdio.h>
struct EH {
    char e[32];
    char h[32];
} eh[29]={
    {"Windows Bitmap (bmp)"       ,                         "424D"},
    {"JPEG (jpg)"                 ,                       "FFD8FF"},
    {"MPEG (mpg)"                 ,                     "000001B3"},
    {"MPEG (mpg)"                 ,                     "000001BA"},
    {"Outlook (pst)"              ,                     "2142444E"},
    {"Real Media (rm)"            ,                     "2E524D46"},
    {"Real Audio (ram)"           ,                     "2E7261FD"},
    {"Adobe Photoshop (psd)"      ,                     "38425053"},
    {"CAD (dwg)"                  ,                     "41433130"},
    {"AVI (avi)"                  ,                     "41564920"},
    {"GIF (gif)"                  ,                     "47494638"},
    {"TIFF (tif)"                 ,                     "49492A00"},
    {"MIDI (mid)"                 ,                     "4D546864"},
    {"ZIP Archive (zip)"          ,                     "504B0304"},
    {"RAR Archive (rar)"          ,                     "52617221"},
    {"Wave (wav)"                 ,                     "57415645"},
    {"Quicktime (mov)"            ,                     "6D6F6F76"},


    {"PNG (png)"                  ,                     "89504E47"},
    {"Quicken (qdf)"              ,                     "AC9EBD8F"},
    {"MS Word/Excel (xls.or.doc)" ,                     "D0CF11E0"},
    {"Windows Password (pwl)"     ,                     "E3828596"},
    {"WordPerfect (wpd)"          ,                     "FF575043"},
    {"XML (xml)"                  ,                   "3C3F786D6C"},
    {"HTML (html)"                ,                   "68746D6C3E"},
    {"Rich Text Format (rtf)"     ,                   "7B5C727466"},
    {"Adobe Acrobat (pdf)"        ,               "255044462D312E"},
    {"Windows Media (asf)"        ,             "3026B2758E66CF11"},
    {"Outlook Express (dbx)"      ,             "CFAD12FEC5FD746F"},
    {"MS Access (mdb)"            ,         "5374616E64617264204A"},
};
FILE *f;
static char s[32];
int i,j,c;
int main(int argc,char **argv) {
    if (argc<2 
[解决办法]
 argc>2) {
        fprintf(stderr,"GuessFileExt according to head bytes.\nUsage: %s filename\n",argv[0]);
        return 1;
    }
    f=fopen(argv[1],"rb");
    if (NULL==f) {
        fprintf(stderr,"Can not open file %s\n",argv[1]);
        return 2;
    }
    for (i=0;i<14;i++) {
        c=fgetc(f);
        if (c==EOF) break;//
        sprintf(s+i*2,"%2X",(unsigned char)c);
        for (j=0;j<29;j++) {
            if (0==strcmp(s,eh[j].h)) {
                printf("%s\n",eh[j].e);
                fclose(f);
                return 0;
            }
        }
    }
    printf("Unknown\n");
    fclose(f);
    return 3;
}


[解决办法]
绝对判断文件是否文本文件,几乎是不可能的。

在一定条件下,是可以判断的,比如通过扩展名。
注意.bat,.c,.h,.cpp,.cc,.cxx 
甚至.html,.xml,.asp ,.aspx 都是文本文件。

VB .frm,.bas,.vb .cls
dephi .dfm,dpr,.pas 也都是文本文件。

驱动程序的安装文件.inf,也是文本文件。

热点排行