C语言如何判断文件类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何判断文件类型?相关的知识,希望对你有一定的参考价值。

c语言文件类型指针是通过file
*fp;
这种形式进行定义的。
关于file结构在vc6中有如下定义:
#ifndef _file_defined
struct _iobuf
    char *_ptr; //文件输入的下一个位置
    int _cnt; //当前缓冲区的相对位置
    char *_base; //指基础位置(即是文件的起始位置)
    int _flag; //文件标志
    int _file; //文件描述符id
    int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
    int _bufsiz; //文件缓冲区大小
    char *_tmpfname; //临时文件名
;
typedef struct _iobuf file;
#define _file_defined
#endifc程序用不同的file结构管理每个文件。程序员可以使用文件,但是不需要知道file结构的细节。实际上,file结构是间接地操作系统的文件控制块(fcb)来实现对文件的操作的,如下图:
上面图中的_file实际上是一个描述符,作为进入打开文件表索引的整数。
文件是存放在物理磁盘上的,包括文件控制块(fcb)和数据块。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息。数据块用来存储实际的内容。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据。
相关函数:
file
*fopen(
char
*file,
char
*open_mode
);
//打开文件,读文件到内存,返回文件信息结构指针
int
fread(
char
s,
int
size,
int
num,
file
*fp
);
//按字节读取文件内容到s中
int
fwrite(
char
s,
int
size,
int
num,
file
*fp
);
//按字节将s地址中的数据写到文件中
char
*fgets(
char
*s,
int
max_size,
file
*fp);
//读一行数据到缓冲区s中
int fseek(
file
*fp,
long
offset,
int
whence);
//移动文件指针到指定位置
void
rewind(file
*fp);
//回到文件头
long
ftell(file
*fp);
//得到当前文件偏移位置
fclose(fp);
//关闭文件,刷新缓存到物理磁盘上
参考技术A windows下,可以根据文件名的扩展名去判断,如.txt是文本文件,.exe是可执行文件
把文件名存到一个变量s中,用strrchr(s,'.')函数去得到扩展名,进行判断就可以了!
参考技术B windows下,可以根据文件名的扩展名去判断,如.txt是文本文件,.exe是可执行文件
把文件名存到一个变量s中,用strrchr(s,'.')函数去得到扩展名,进行判断就可以了!

C语言如何判断文本文档的结束

我想在文档结束的时候跳出循环,但是用fread和feof好像都没用,指针老是停留在最后一个字符那里,跳不出来(扩展名为dat的输入文档)
我想问一下stream = fopen("f:\\a.txt", "r"); 中的“r”是什么

C语言判断文本文档的结束的源代码如下:

#include <iostream>

#include <fstream>

using namespace std;

#define FILENAME "stat.dat"

int main()

fstream _file;

_file.open(FILENAME,ios::in);

if(!_file)

cout<<FILENAME<<"没有被创建";

else

cout<<FILENAME<<"已经结束";

return 0;

扩展资料

C语言向文件写入内容并读取显示的源代码如下:

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#define FILE_PATH "D:/demo.txt"  // 文件路径

int main()

char name[20];  // 姓名

int age;  // 年龄

int studNo;  // 学号

float score;  // 平均分

FILE *fp;  // 文件指针

// 判断文件是否能够正确创建/打开

if( (fp=fopen(FILE_PATH,"wt+")) == NULL )

perror(FILE_PATH);

exit(1);

参考技术A 持续读取字符,直到读函数返回错误,这时进行feof判断,如果为真,则表示文本文档结束。
int feof(FILE *fp);
功能为判断文档是否结束,如果已经达到文件尾,返回1,否则返回0.

除此外,部分读函数本身返回值同样可以判断是否结尾。
1 fgets, 返回NULL表示文件结尾。
2 fscanf, fgets等,返回EOF表示=文件结尾。
参考技术B #include <stdio.h>
int main(void)

FILE *stream;
stream = fopen("f:\\a.txt", "r");
char ch=fgetc(stream);
while (ch!=EOF) //也可以改为:while(!feof(stream))

putchar(ch);
ch=fgetc(stream);

fclose(stream);
return 0;


如果是文本,一般文本文件的结尾是以ascii码25表示的,你读到这个字符,也可以认为文本文件结束了.

eof函数查看最后一次读文件是否为文件的最后一个记录,是,返回非零,否,返回零。eof可以不加括号。

while($line=<FILE>

......
if(eof)
......

本回答被提问者采纳
参考技术C 文件结束用是否读到文件结束符EOF来判断。

fread 用于2进制方式打开文件来读。
fread 不能判断是否读到EOF。
fread 只能判断要求读进的字节数 是否等于 实际读到的字节数。如果不等,知道发生了 读 的错误。

feof 不能预报 “文件已到文件尾,下面将是文件结束符EOF ". 只有当 fgetc 等语句 读入 文件结束符EOF 以后,feof才能报告:“已到文件尾啦”。

fscanf(), fgetc() 等语句能自己知道已到文件尾,并送返EOF,所以很容易判断。

例如循环读,遇到EOF跳出循环体:
while(1==1)

if ( ( gb = fgetc(fin)) == EOF ) goto Lab01;
a[k] = gb;
if ( fscanf(fin, "%s", buff[k]) ==EOF ) goto Lab01;
k++;
;
Lab01: fclose(fin);
参考技术D ifstream ufile("c:\1.txt");
ufile.eof();//结束为1,不结束为0

以上是关于C语言如何判断文件类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何用c语言判断一个未知文件的文件类型

用c语言根据文件后缀名判断文件类型

c语言中如何实现输入一个整数实现倒序输出

c语言 怎么判断输入的是否数字?

C语言源文件之间的自定义类型(结构体)如何相互引用?

C语言判断指定文件是不是存在