C语言文件操作

一. 文件的基本访问模式:read,write,open,close,lseek. 下面的函数均定义在<I/O.h>和<fcntl.h>中。

1.

int open(const char *pathname,intaccess)

其中,pathname是文件的路径名,access是文件的打开方式,有O_RDONLY,O_WRONLY,O_RDWR,O与_CREAT,O_TRUNC,O_PAAEND等的或运算。

用法:

int fd=open("C:\\TEST",O_RDWR|O_CREAT);

返回值为文件句柄,打开失败返回-1,打开成功,则返回值留有后用。

2.

int read(int handle,char*buf,unsigned len)

其中,handle是在open()执行完得到的,如上面的fd,就是handle,buf是保存读入内容的内存指针。len是实际读入的字节数.返回值为实际读入的字节数,返回0表示读到了末尾,返回-1表示出错。

用法:

int n_read=read(fd,buf,BUFSIZE);

3.

int write(int handle,char*buf,unsigned len)

用法:

int n_write = write(fd,buf,BUFSIZE);


4.

int close(handle)
handle是open函数获得的句柄

用法:

int ret =close(fd);

5.

long lseek(int handle,long offest,int formwhere)
handle是open函数获得的句柄,offset是相对formwhere的偏移位置,fromwhere可以是seek_set,seek_cur,seek_end中的任何一个,分别表示在文件头,文件当前位置,文件末尾成功返回后的当前位置,从文件头算起,否则返回-1L。

用法:

int pos = lseek(fd ,100L,SEEK_CUR);
得到文件长度的用法:

flength=lseek(fd,0L,SEEK_END);
得到当前位置的用法:

cur_pos= lseek(fd,0L,SEEK_CUR);

二. C语言独特的文件访问方式

下面介绍的函数,都定义在<stdio.h>中。

1.

FILE *fopen(const char *filename,const char *mode)
其中,filename是文件名,包含路径,如果路径没有,则会打开当前目录文件,mode是打开方式,常用的方式有:r,w,rw,a,分别表示,只读,只写,读写,追加。返回值为此文件的指针,留有后用,如果打开失败,返回NULL。

用法:

FILE *fp=fopen("C:\\system32.sys","wr");

常用的打开文件方式:

if((fp=open("C:\\abc.txt","r"))==NULL)
{
       printf("Can't open the file!\n");
       exit(0);
}


2.关于文件指针

FILE  *fp;与文件相关的每个流,都有一个FILE类型的控制结构,定义有关文件操作的信息。

typedef struct
{
     short level; /*缓冲区‘满’或‘空’的程度*/
     unsigned flags; /*文件状态标志*/
     char fd; /*文件描述符*/
     unsigned char hold; /*如无缓冲区不读字符*/
     short bsize; /*缓冲区的大小*/
     unsigned char *buffer;/*数据缓冲区的位置*/
     unsigned char *curp; /*指针当前的指向*/
     unsigned istemp; /*临时文件指示器*/
     short token; /*用于有效性检查*/
}FILE;
在stdio.h文件中定义


3.int fgetc(FILE *fp)
这个函数的返回值是返回所读取的一个字节,如果读到文件末尾或者出错时,返回EOF。

4.int fputc(FILE *fp)

这个函数的功能是把字符ch写入文件指针fp所指向的文件的当前写指针位置。

5. char *fgets(char *s,int n,FILE *fp)

*s:字符型指针,用来指向存储所得数据的地址;n:整型变量,用来指明存储数据的大小;*fp:文件结构体指针

从文件结构体指针fp中读取数据,每次读一行,读取的内容保存在buf所指向的字符数组中,每次读取bufsiz-1个字符(第bufsiz个字符为‘\0')。

6.int fscanf(FILE *fp,const char *format,[argument]......)

功能:从一个流中格式化输入,fscanf()遇到空格或者换行时结束.

for example:定义 char a[10],int b,double c.

fscanf(*fp,"%s %d %lf",&a,&b,&c);

7.int fprintf(FILE *fp,const char *format,[argument])

功能:格式化输出到一个流文件中。

for example;定义 char s[]="adffadgg"; double b=1.05; int a=10;

fprintf(*fp,"%s %d %lf",s,a,b);

8.size_t fread(void *ptr,size_t size,size_t n,FILE *fp)

功能:从一个流文件中读取数据,最多读取n个元素,每个元素size个字节,如果调用成功,则返回实际读取到的元素个数,如果不成功或者读到文件末尾,则返回0.

for example:定义char s[]="adadbfdfdd",char buf[20].

fread(buf,strlen(s)+1,1,fp);

9. int feof(FILE *fp);

功能:用来检测流文件中的截止符,如果文件结束,则返回非0值,否则返回0.

10. int fclose(FILE *fp)

功能:关闭一个流文件,把遗留在缓冲区的数据写入文件中,在执行关闭操作。如果关闭成功,则返回0,否则返回EOF(-1)。


三. 错误处理

所有文件出错时,都返回-1.

void perror(const char *s);perror函数向标准错误输出字符串s,随后附上错误的说明。

ferror(FILE *fp):

检查输入输出函数的调用是否正确,返回非0值表示出错。

feof():

检查文件是否结束,返回非0值,表示结束。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值