问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么在程序中判断一个文件的类型?

发布网友 发布时间:2022-04-22 05:10

我来回答

5个回答

热心网友 时间:2023-06-26 10:09

其实之所以要使用文件类型,只是为了方便软件认识,让后进行关联。它不是必要的。

比如说 *.doc 文件,默认关联的程序是 Microsoft Word 。关联程序的意思是,你双击这个文件,会自动用 Microsoft Word 打开它。

但这只是默认的,可以通过下面的步骤来修改打开 *.doc 文件的默认程序:
【在文件上右击-打开方式-选择程序,选择一个软件】,比如说金山的 wps。
那么下次你双击 *.doc 文件,就是用金山 wps 打开了。

综上所述,一种类型的文件,是可以用多种软件打开的(*.doc 可以用 WORD 打开,也可以用 WPS 打开,当然还可以用其他程序打开,这要它能识别文件的格式。)。加上文件类型,可以让程序方便的找到自己能识别的文件。当然,没有文件类型,文件的内容(一串二进制数字)其实是一样的,程序还是能打开的。

比如说有个文件叫 a.doc,你双击它,默认会用 Microsoft Word 打开。

把它重命名为 a (注意没有文件类型后缀),双击打,操作系统就【不知道】怎么打开这个文件了。
这时候,操作系统会跳出一个对话框,让你选择打开这个文件的程序。如果选择了 Microsoft Word ,还是可以正常打开这个文件的。
但是,这样就很麻烦了,你每次都要在一大堆程序的列表中,选择用一个程序才能打开文件 a。

这才是文件类型真正的作用。

---------------------------------------------------------------------------------------------------------

.doc 文件类型:Microsoft Word 文档(因为 *.doc 类型是 Microsoft 首先定义,才这么叫的)
.xlsx 文件类型:Microsoft Excel 工作(同 *.doc)
.pptx 文件类型:Microsoft PowerPoint 演示文稿(同 *.doc)

现在一般这么叫的:

.doc 文件类型:Word 文档
.xlsx 文件类型:Excel 工作
.pptx 文件类型:PowerPoint 演示文稿

区别就是去掉了公司名字 “Microsoft ”,因为这些文件类型以及很成熟了,很多公司都开发出了能打开这些类型文件的应用程序了,再加上 "Microsoft " 的名字就不合适了。
---------------------------------------------------------------------------------------------------------

上面都是废话,下面是提取文件类型的小程序:

#include <stdio.h>
#include <string.h>
char * getType(char fileName[], char type[])
{
int i=strlen(fileName)-1, j;
char ch;

for(type[0]='\0';i>=0;i--)
{
if(fileName[i] == '.')
{// 遇到文件类型分隔符
for(j=i; fileName[j]!='\0'; j++)
{
ch = fileName[j];
type[j-i] = ('A'<=ch && ch<='Z') ? (ch+'a'-'A'): ch;
}

type[j-i] = '\0';
break;
}
else if(fileName[i] == '/' || fileName[i]=='\\')
{// 遇到目录分割符,退出
break;
}
}

return type;
}
char * getTypeName(char type[], char typeName[])
{
if(strcmp(".doc", type) == 0)
strcpy(typeName, "WORD 文档");

else if(strcmp(".xlsx", type) == 0)
strcpy(typeName, "Excel 工作表");

else if(strcmp(".pptx ", type) == 0)
strcpy(typeName, "PowerPoint 演示文稿");

else if(strcmp(".txt", type) == 0)
strcpy(typeName, "文本文档");

else
strcpy(typeName, "其他类型文档");
}
int main(int argc, char *argv[])
{

char fileName[300];
char type[10];
char typeName[100];
// 输入文件名,可以包含多层目录路径,可以含空格,按 ctrl + z 停止输入
while(gets(fileName)!=NULL)
{
getType(fileName, type);
getTypeName(type, typeName);

printf("file:[%s] type is [%s,%s]\n", fileName, type, typeName);
}
return 0;
}

/*
aa.DOC
bb.xlsx
cc.PPPTS
dd.txt
ee.zzz
*/

热心网友 时间:2023-06-26 10:10

多数文件都有一个fileheader,即文件头,里面包含文件类型的信息。
但文本文件比较简单。只能通过文件名后缀判断;
cfiledialog中有一个过滤器,filter函数,可以判断后缀(.txt)。

热心网友 时间:2023-06-26 10:10

#include <stdio.h>
#include <string.h>
char * getType(char fileName[], char type[])
{
int i=strlen(fileName)-1, j;
char ch;

for(type[0]='\0';i>=0;i--)
{
if(fileName[i] == '.')
{// 遇到文件类型分隔符
for(j=i; fileName[j]!='\0'; j++)
{
ch = fileName[j];
type[j-i] = ('A'<=ch && ch<='Z') ? (ch+'a'-'A'): ch;
}

type[j-i] = '\0';
break;
}
else if(fileName[i] == '/' || fileName[i]=='\\')
{// 遇到目录分割符,退出
break;
}
}

return type;
}
char * getTypeName(char type[], char typeName[])
{
if(strcmp(".doc", type) == 0)
strcpy(typeName, "WORD 文档");

else if(strcmp(".xlsx", type) == 0)
strcpy(typeName, "Excel 工作表");

else if(strcmp(".pptx ", type) == 0)
strcpy(typeName, "PowerPoint 演示文稿");

else if(strcmp(".txt", type) == 0)
strcpy(typeName, "文本文档");

else
strcpy(typeName, "其他类型文档");
}
int main(int argc, char *argv[])
{

char fileName[300];
char type[10];
char typeName[100];
// 输入文件名,可以包含多层目录路径,可以含空格,按 ctrl + z 停止输入
while(gets(fileName)!=NULL)
{
getType(fileName, type);
getTypeName(type, typeName);

printf("file:[%s] type is [%s,%s]\n", fileName, type, typeName);
}
return 0;
}

/*
aa.DOC
bb.xlsx
cc.PPPTS
dd.txt
ee.zzz
*/

热心网友 时间:2023-06-26 10:11

如果你是想只打开文本文件的话,只要在CFileDialog的过滤器中只添加文本文件类型就行(*.txt等文本类型)。
如果你是想实现选错文件时提示出错功能,可以用文件后缀判断,在CFileDialog窗口选择文件点确定后,通过CFileDialog成员函数获得文件完整路径(其中包括文件名),然后截取后缀同过字符串判断是否为文本文件

热心网友 时间:2023-06-26 10:11

使用系统调用的函数,先获取该文件的文件名,然后判断“.”后面的文件类型,如果是文本文件就打开,如果是其他文件则报错,那个函数好像是stat的什么的,很久没用,忘记了,最后返回一个结构体类型,结构体内的其中一个成员就是文件名。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孤胆枪手怎么设置局域网啊、 我家小狗刚领来,没有名字,拜托大家起个名字。 护肤品代加工 水浒Q传跨服PK是怎么回事啊 新水浒Q传什么叫PK保护状态,上号不到一分钟就被打,求解 水浒Q传 为什么要pk有什么好处? 为什么贷款每次都审核失败 有谁能说一下手机贷审核不通过的原因吗?我都审核好多次了都不能通过... 贷款审核失败是什么原因 为什么贷款未通过审核 在世间,本就是各人下雪,各人有各人的隐晦与皎洁 ... 有关中华儿 女报效祖国,为国争光的读后感 有艾奇手表这个牌子么?W8411G—C这个型号多少钱啊? 如何确定一个文件的类型? 为什么会下雪,雪是从哪里来的? 2008感动中国的观后感 有一种情侣表,一个只有时针,一个只有分针,在一... 如何查看文件扩展名?如何判断文件类型? 在世间,本就是各人下雪,各人有各人的隐晦与皎洁... 山峡博物管 下雪了,大家知道哪些古代人描写下雪的诗句呢? ieyki是什么牌子手表 三峡博物馆观后感两三百字左右``谢谢 急`!! EIKY艾奇手表是怎样的牌子? 各人下雪是什么意思? 艾奇手表efls8831l—sg01多少钱? &#39;各自打扫门前雪,休管他人瓦上霜&#39;出处 艾奇手表怎么查询真伪 &#127810; 这世间本就是各人下雪 各人有各人的隐晦... eyki手表怎样查看型号 有艾奇手表这个牌子么?W8516AG—这个型号多少钱啊? 咒术回战算acg吗 雪的来历 怎样判断文件的类型?请区分下列文件的类型 .txt .... 2006感动中国读后感 艾奇手表 overfly系列 型号W8453 怎样调整时间日期 《咏雪》和《陈太丘与友期行》分别出自哪里 每种文件类型都有其自己的magic number用来判断文... 读了郦道元的《三峡》之后有什么感想的作文谁有啊,... 艾奇手表多少钱? 杨闇公生平事迹读后感 艾奇的机械表 VB中如何判断文件类型? 艾奇手表E7042L是什么机芯? C或者C++判断文件的类型。 2009感动中国观后感 艾奇这款表怎么样? java 判断文件类型 谁知道 艾奇(手表牌子)的官网啊,或者有艾奇09新... 用c语言根据文件后缀名判断文件类型