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

C语言如何判断文件类型?,第1张

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)

//关闭文件,刷新缓存到物理磁盘上

一般来说在C语言中读取txt文件的信息有两种方法,一种是使用C语言标准文件I/O中的fopen()、fread()等等函数,一种是调用 *** 作系统中的API函数,比如Windows上的ReadFile()、OpenFile()等等,现在 *** 作系统一般都具备内存文件映射功能,对于大的txt文件,一般都使用这种方式 *** 作。下面是一个使用C语言标准文件I/O *** 作文件的例子。

#include<stdio.h>

FILE*stream

void main(void)

{

long l

float fp

char s[81]

char c

stream=fopen("fscanf.out","w+")

if(stream==NULL)

printf("Thefilefscanf.outwasnotopened\n")

else

{

fprintf(stream,"%s%ld%f%c","hello world",

65000,3.14159,'x')

/*Setpointertobeginningoffile:*/

fseek(stream,0L,SEEK_SET)

/*Readdatabackfromfile:*/

fscanf(stream,"%s",s)

fscanf(stream,"%ld",&l)

fscanf(stream,"%f",&fp)

fscanf(stream,"%c",&c)

/*Outputdataread:*/

printf("%s\n",s)

printf("%ld\n",l)

printf("%f\n",fp)

printf("%c\n",c)

fclose(stream)

}

}

一、判断文件夹是否存在:\x0d\x0a1.用CreateDirectory(".//FileManege",NULL)如果文件夹FileManege不存在,则创建。\x0d\x0a2.或者if(_access(".//FileManege",0)==-1),表示FileManege不存在。\x0d\x0a3.或者BOOL PathIsDirectory(LPCTSTR pszPath)二、判断文件是否存在:\x0d\x0a1.用if((file=fopen(".//FileManege//F//F.dat","rb"))==NULL)\x0d\x0afile=fopen(".//FileManege//F//F.dat","ab+")// 先判断有无文件,没的话新建一个\x0d\x0a2.用if(_access(".//FileManege//F//F.dat",0)==-1),表示文件不存在。 函数int _access( const char *path, int mode )可以判断文件或者文件夹的mode属性\x0d\x0amode=00//Existence only\x0d\x0amode=02//Write permission\x0d\x0amode=04//Read permission\x0d\x0a需要包含头文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8047370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存