C语言文件操作

FILE文件指针:

定义于include的stdio.h中

typedef struct  {
        short           level;          /* fill/empty level of buffer */
        unsigned        flags;          /* File status flags    */
        char            fd;             /* File descriptor      */
        unsigned char   hold;           /* Ungetc char if no buffer */
        short           bsize;          /* Buffer size          */
        unsigned char   *buffer;        /* Data transfer buffer */
        unsigned char   *curp;          /* Current active pointer */
        unsigned        istemp;         /* Temporary file indicator */
        short           token;          /* Used for validity checking */
}       FILE;    

 

其中还有一个特殊的EOF的定义:

#define EOF     (-1)  

 

主要包含的函数:

FILE *fopen(char *name,char *mode);

mode说明:

"rt"      只读打开一个文本文件,只允许读数据
"wt"      只写打开或建立一个文本文件,只允许写数据
"at"      追加打开一个文本文件,并在文件末尾写数据
"rb"      只读打开一个二进制文件,只允许读数据
"wb"       只写打开或建立一个二进制文件,只允许写数据
"ab"      追加打开一个二进制文件,并在文件末尾写数据
"rt+"      读写打开一个文本文件,允许读和写
"wt+"      读写打开或建立一个文本文件,允许读写
"at+"     读写打开一个文本文件,允许读,或在文件末追加数 据
"rb+"      读写打开一个二进制文件,允许读和写
"wb+"      读写打开或建立一个二进制文件,允许读和写
"ab+"      读写打开一个二进制文件,允许读,或在文件末追加数据

 

int getc(FILE *fp);

返回fp指向的输入流中的下一个字符。如果达到文件尾或者出现错误,该函数将返回EOF

int putc(int c,FILE *fp);

将字符c写入fp指向的文件中,并返回写入的字符,如果发生错误,返回EOF

int fclose(FILE *fp);关闭文件,释放文件指针。在stdio.h中定一个最大打开的文件数

#define OPEN_MAX 20                     /* Total of 20 open files */

所以打开的文件要及时关闭。

 

int fgetc(FILE *stream);

返回stream流的下一个字符,返回类型为unsigned char(强制转换为int),如果到达文件尾或错误,返回EOF

char *fgets(char *s,int n,FILE *stream);

将下n-1个字符读入数组s中。当遇到'/n'后,把'/n'读入数组s中,读取过程终止。数组以'/0'结尾。如果遇到文件末尾或者错误,返回NULL。

int fputc(int c,FILE *stream);

把c转换成unsigned char 型输出到流stream中,返回写入的字符,出错返回EOF

int fputs(const char *s,FILE *stream);

把字符串s输出到流stream中,返回非负值,出错返回EOF

int ungetc(int c,FILE *stream);

把字符c写回到流stream中,下次对该流操作时,返回该字符。对每个流只能写回一个字符,且此字符不能是EOF。unget返回被写回的字符,如果发生错误,返回EOF

 

int fprintf(FILE *streame,const char *format,...);

返回实际写入的字符数。若出错返回一个负值。

int fscanf(FILE *stream,const char *format,...);

根据格式串format从流stream中读取输入,并把转换后的值赋值给后续的各个参数,其中的每个参数都必须是一个指针。当格式串format用完时,函数返回。如果达到文件的末尾或在转换输入前出错,该函数返回EOF;否则,返回实际被转换并赋值的输入项数目。

int fread(void *buf,int size,int count,FILE *stream);

从stream指向的流文件读取最多count(对象数)个对象,每个对象为size(字段长度),并把他们放在buf指向的字符数组中。返回读取的对象数目,此返回值可能小于count。通过函数feof和ferror获得结果执行状态。

int fwrite(void *buf,int size,int count,FILE *stream)

从buf指向的字符数组中,把count个对象写到stream所指向的流中,每个字段为size个字符长,函数操作成功时返回所写对象数。如果发生错误,返回值会小于count的值。

 

随机文件读写

int fseek(FILE *stream,long offset,int origin)

设置流stream的文件位置,后续的读写操作将从新位置开始。对于二进制文件,此位置被设置为从origin开始的offset个字符处。origin的值可以为SEEK_SET(文件开始处)、SEEK_CUR(当前位置)或SEEK_END(文件结束处)。对于文本流,offset必须设置为0,或者由函数ftell返回的值(此时origin的值必须是SEEK_SET)。fseek函数在出错时返回一个非0值。

long ftell(FILE *stream)

ftell函数返回stream流的当前文件位置,出错时返回-1L

void rewind(FILE *stream)

rewind(fp)函数等价于语句fseek(fp,0L,SEEK_SET);clear(fp);的结果

int fgetpos(FILE *stream,fpos_t *ptr)

把stream流的当前位置记录在*ptr中,供随后的fsetpos函数调用使用。若出错返回一个非0值

int fsetpos(FILE *stream,const fpos_t *ptr) 

将流stream的当前位置设置为fgetpos记录在*ptr中的位置,出错返回一个非0值

 

FILE *freopen(const char *path,const char *mode,FILE stream)

j将一个流与一个文件相连

例:freopen("t1.txt","w",stdout);putchar(ch);ch写入到文件t1.txt中

freopen("t2.txt","r",stdin);ch=getchar();从t2.txt读取字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值