摘要:本文总结了C语言中文件操作函数:fopen, fclose; fgetc, fputc; fgets, fputs; fscanf, fprintf; fread, fwrite; fseek。 并且给出了极为简单的实例。
(1) return
文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
所以测试文件是否打开可以这样:
if( fp == NULL )
do_error();
(2) Mode:
r (读)w(写)a(追加)
b(二进制操作)
+(允许读写)
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
at+ 打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。
与fopen配对,当你yongfopen打开文件后,必须使用fclose关闭文件。
函数从输入流的当前位置返回一个字符,并将文件指针指示器移到下一个字符处,如果已到文件尾,函数返回EOF,此时 表示本次操作结束。
while( (ch = fgetc(fp)) != EOF )
{
do_by_char();
}
函数完成将字符ch的值写入所指定的流文件的当前位置处,并将文件指针后移一位。
fputc()函数的返回值是所写入字符的值,出错时返回EOF。
#define getchar() getc( stdin )
#define putchar( c ) putc( (c), stdout )
while( fgets(str, 128, fp) != NULL )
{
do_by_line();
}
char* fgets( char *s, int n, FILE *fp )
{
register int c;
register char *cs;
cs = s;
while( --n > 0 && ( c=getc(fp) ) != EOF )
if( (*cs++ = c) == '\n' )
break;
*cs = '\0';
return ( c == EOF && cs == s )? NULL : s;
}
int fputs( char *line , FILE *fp )
{
int c ;
while( c = *s++ )
putc( c, fp );
return ferror( fp )? EOF : 0;
}
与scanf用法相同
与printf用法相同
while( fscanf( fp, "%s%d", str, &i ) != EOF )
{
fprintf( stdout, "%s \t %d", str, i );
}
fread()函数从stream 指向的流文件读取count (字段数)个字段,每个字段为size(字段长度)个字符长,并把它们放到b u f(缓冲区)指向的字符数组中。
fread()函数返回实际已读取的字段数。若函数调用时要求读取的字段数超过文件存放的字段数,则出错或已到文件尾,实际在操作时应注意检测。
函数从buf(缓冲区)指向的字符数组中,把count(字段数)个字段写到stream所指向的流中,每个字段为size个字符长, 函数操作成功时返回所写字段数。关于成块的文件读写,在创建文件时只能以二进制文件格式创建。
while ( !feof( fp ) )
{
fread( str, sizeof(int), 127, fp );
}
int fseek( FILE *fp, long offset , mode )
mode :
SEEK_SET : 0 ——开头
SEEK_CUR: 1——当前
SEEK_END: 2——结尾