热门 购物 团购 理财 文学 人才 体育 汽车 游戏 软件 军事 音乐 视频 媒体 论坛 博客 银行 交友 综合
一起购 唯品会 梦芭莎 趣玩网 凡客诚品 麦考林 乐淘鞋网 弗克尚品 绿盒子 俏物悄语 新蛋网 当当网 玛萨玛索
拉手网 糯米网 爱帮团 聚划算 58团购 美团网 QQ团购 大众点评团 窝窝团 美淘网 满座网 团宝网 饭统饭团
起点网 榕树下 小说阅读 潇湘书院 红袖添香 幻剑书盟 新浪游戏 太平洋游戏 163邮箱 中国游戏 游戏中国 霏凡软件 铁血军事
访问本站赠送红包啦!凡在支付宝搜索数字口令 528131323 都将获得红包,天天搜索此口令天天得红包^_^
Health Sitology Family Finance Appliances Shopping Clothing Education Legal Rituals Beauty Property Travel Pet Medical Cyclopedia History Military Computers Sports Job Anecdote Geographic Mixed Entertain Literature Emotion Agriculture
/**
 * 任何人任何机构皆可用于任何项目,此软件免费无需书面授权
 * 在软件和软件的所有副本中都必须包含版权声明和软件相关注解
 *
 * 模块: ftype.c
 * 简述: 判断文件类型
 * 作者: woods zhang  ->  hoojar@163.com -> http://www.hecart.com/
 * 版权: 2006-2018, 张树林 拥有此源码所有版权 (MIT许可协议)
 * Copyright 2006-2018, Woods Zhang All Rights Reserved (The MIT License)
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 文件类型或扩展名
 *
 * @param fname 文件名
 * @return 返回文件类型扩展名
 */
char *filetype(char *fname)
{
    struct EXT
    {
        char e[5];
        char h[32];
    } ext[29] =
    {
        {"bmp", "424D"},
        {"jpg", "FFD8FF"},
        {"mpg", "000001B3"},
        {"mpg", "000001BA"},
        {"pst", "2142444E"},
        {"rm", "2E524D46"},
        {"ram", "2E7261FD"},
        {"psd", "38425053"},
        {"dwg", "41433130"},
        {"avi", "41564920"},
        {"gif", "47494638"},
        {"tif", "49492A00"},
        {"mid", "4D546864"},
        {"zip", "504B0304"},
        {"rar", "52617221"},
        {"wav", "57415645"},
        {"mov", "6D6F6F76"},
        {"png", "89504E47"},
        {"qdf", "AC9EBD8F"},
        {"doc", "D0CF11E0"},
        {"pwl", "E3828596"},
        {"wpd", "FF575043"},
        {"xml", "3C3F786D6C"},
        {"html", "68746D6C3E"},
        {"rtf", "7B5C727466"},
        {"pdf", "255044462D312E"},
        {"asf", "3026B2758E66CF11"},
        {"dbx", "CFAD12FEC5FD746F"},
        {"mdb", "5374616E64617264204A"},
    };

    int i, j, c;
    static char fext[32] = {0};
    FILE *f = fopen(fname, "rb");
    if (f)
    {
        for (i = 0; i < 14; i++)
        {
            c = fgetc(f);
            if (c == EOF)
            {
                break;
            }
            sprintf(fext + i * 2, "%2X", (unsigned char) c);
            for (j = 0; j < 29; j++)
            {
                if (strcmp(fext, ext[j].h) == 0)
                {
                    fclose(f);
                    strcpy(fext, ext[j].e);
                    return fext;
                }
            }
        }
        fclose(f);
    }

    /**
     * 截取文件扩展名
     */
    i = 0, j = 0;
    while (*fname)
    {
        if (*fname == '.')
        {
            j = i;
        }
        i++;
        fname++;
    }

    if (j == 0)
    {
        strcpy(fext, "unk");
    }
    else
    {
        fname = fname - i;//移动指针到头处
        memcpy(fext, &fname[j + 1], i - j - 1);
        fext[i - j - 1] = '';
    }

    return fext;
}

int main(int argc, char **argv)
{
    if (argc < 2 || argc > 2)
    {
        fprintf(stderr, "GuessFileExt according to head bytes. Usage: %s filename ", argv[0]);
        return 1;
    }

    printf("FILE EXT: %s ", filetype(argv[1]));

    return 0;
}
Reply content :
Photo link :
人类的皮肤,基本上有三种类型,即中性皮肤、油性皮肤和干性皮肤。中性皮肤组织紧 密,厚薄适中,光滑柔软,富有弹性,是较好的皮肤类型。油性皮肤,面部皮肤毛孔较大, 脂肪较多,…  Details
一、叶菜类蔬菜。叶菜类蔬菜是指生长期较短的绿叶菜,如白菜、青菜、苋菜、菠菜、芹菜、牛皮菜等,以其叶片全株供食用。由于该类蔬菜植株群体高度密植,根系分布较浅,对土壤…  Details
对数据库的备份是网站管理人员的必修课,那么常用的数据库备份方式有哪些呢?应如何选择?数据库备份有四种类型,分别应用于不同的场合,下面简要介绍一下。 1、完全备份 这是大…  Details
根据年龄、性别、季节以及皮肤的敏感状况,可以把皮肤分为油性皮肤、干性皮肤、中性皮肤、敏感性皮肤和成熟性皮肤五种。 油性皮肤:皮脂分泌量比正常皮肤高,这类皮肤称为油…  Details
最近一直在思考如何把搜索引擎战略大会打造成持续的知名国内品牌。这个会议的全球影响是不言而喻的,但在国内仍然存在着相当的知名度不足甚至是误解。思考的过程,不由比…  Details
元素通常具有多个属性。HTML的IMG元素可有HEIGHT、WIDTH、ALT、BORDER、ALIGN和其他几个属性 。实际上,大部分HTML标记都具有多个属性,XML标记也是如此。例如,很自然的RECTANGLE元素需要LENGTH和WID…  Details
我国海水养鱼常用的网箱类型有:浮动式网箱、固定式网箱和沉下式网箱三种。从外形上又可分为方形、圆形和多角形。从组合形式上可分为单个网箱和组合式网箱。 (一)浮动式网箱 这…  Details
作为女孩,如果你的穿着扮妆能恰如其分地表达你的个性风格,不但你自己觉得舒服,其他人也会觉得自然。下面几种风格也许有一种适合你。           浪漫…  Details
要为一个文档创建适当的DTD的第一步是了解用DTD中定义的元素编码的信息结构。有时候信息就像通讯地址列表一样。有时则具有相对自由的形式,如说明短文或杂志文章。让我们以已经相对…  Details
在合法的XML文档中使用的每项标记都要在DTD中的元素声明中加以声明。一项元素声明指明了元素名称和元素可能的内容。内容清单有时称为内容规格。内容规格使用一种简单的语法精确地指…  Details