首页 > 代码库 > 【c基础】之 文件及其操作

【c基础】之 文件及其操作

文件的打开与关闭

首先要定义一个文件指针类型,格式为 FILE *文件指针名; ;

FILE *fp;  //fp就是定义的文件指针

 

●打开文件fopen()函数,格式: fp = fopen("文件名", "打开方式"); 

fp = fopen("c:\\myfile", "r");  //打开方式下文会讲到

 

文件名中不允许直接使用路径描述符 "\",必须用转义字符的形式 "\\"。"\\" 中第一个 "\" 是转义字符,第二个表示路径描述符。

 

●关闭文件fcolse()函数,格式: fclose(文件指针); 

fclose(fp);

功能:正常完成关闭文件操作时fclose返回0,否则返回EOF(值为-1),表示有错误发生。

●打开文件的方式:

共有12种,由r(read), w(write), a(append), b(binary), +(read/write)五个字符组合而成。

"r", "w", "a", "r+", "w+", "a+"  :这六种打开文本文件

 "rb", "wb", "ab", "rb+", "wb+", "ab+"  :这六种打开二进制文件

"r" 打开一个文本文件,可以读取文件
"w" 打开一个文本文件,可以写入文件,先将文件的长度截为0。如果该文件不存在则先创建
 "a" 打开一个文本文件,可以写入文件,向已有文件的尾部追加内容,如果该文件不存在则先创建
"r+" 打开一个文本文件,可以进行更新(读取和写入),也即可以读取和写入文件
"w+" 打开一个文本文件,可以进行更新(读取和写入),如果该文件存在则首先将其长度截为0,如果该文件不存在则先创建
"a+" 打开一个文本文件,可以进行更新(读取和写入),向已有文件的尾部追加内容,如果该文件不存在则先创建;可以读取整个文件,但写入时只能追加内容。
"rb", "wb", "ab", "rb+", "wb+", "ab+", "r+b", "w+b", "a+b" 与前面的模式相似,只是使用二进制而非文本模式打开文件

注意:如果用"w"模式打开任意一个文件,文件内容将删除,以便程序以一个空文件开始操作。

 

●文件结束的判定feof()函数,格式: feof(文件指针) 

这里举一个例子帮助理解:

while(!feof(fp))   //我们已在文件的末尾加上结束标志-1
{   c = fgetc(fp); 
    print("当到文件尾时,此段文字不显示");
}
//此段程序的含义是:当为!feof(fp)为1,从当前位置读入一个字节的数据赋给字符型变量c,指当遇到文件结束标志时,feof(fp)的值为1,feof(fp)为0,循环结束

 

feof()函数功能:测试文件指针所指向的文锦啊内部读写位置指针是否到达文件尾。当文件结束时返回1,否则返回0。

 

文件的读写

1.字符,字符串的读写

写字符函数fputc,功能:把一个字符写入此盘文件中,若输出成功,则返回输出的字符,否则返回EOF。格式:

fputc(ch, fp);   //将字符ch的值输出到fp所指向的文件中

 

ch:要输出的字符,可以是字符常量,也可以是字符变量。

 

读字符函数fgetc,功能:从指定文件读入一个字符,该文件必须是以读或读写方式打开的,若读取成功返回读取的字符,否则返回EOF。格式:

ch = fgetc(fp);  //读取成功返回字符赋值给ch

 

写字符串函数fputs,格式: fputs("字符串", 文件指针);     功能:向指定的文件写入一串字符,写入成功返回0,否则返回非0值。

fputs("Welcome to my blog", fp);

注意:fputs函数将写入文件的字符串中的空字符去掉,ptus函数将空字符换成换行字符输出。

 

读字符串函数,格式: fgets(字符串, n, fp);      功能:从fp指向的文件读入n-1个字符存放第一个参数中,如果遇到换行符或EOF,则结束。

fgets(str, n, fp); //str 为字符数组。从fp指向的文件读入n-1个字符存放到str数组中

注意:读入字符串后在最后加一个 ‘\0‘ 字符,fgets函数返回的返回值为字符串的首地址。

 

 

2.数据块的读写

数据块写文件函数fwrite(),格式:

fwrite(buffer, size, count, fp);

buffer:是一个指针,用来指出带输出数据的地址。

size:每次要写的字节数

count:写入多少个size大小的数据项

注意:完成写操作(fwrite())后必须关闭文件(fclose())

 

数据块的读文件函数fread(),格式:

fread(buffer, size, count, fp);

count:读入多少个size大小的数据项

 

3.格式化读/写文件函数

读文件fprintf(),格式: fprintf(文件指针,"格式控制",输出列表); 

fprintf(fp,"%d, %d",a, b);  //将a,b写入fp指向的文件中

注意:fprintf()函数总是将输出项在内存中的表示形式按指定的格式转换成字符串形式,再写入到指定的文件中。

 

写文件fscanf(),格式: fscanf(文件指针,"格式控制",地址列表); 

fprintf(fp,"%d, %d",&a, &b);  //将fp指向的文件中的数据读出并存放于a,b

注意:fscanf()函数从文件中读出的数据一定是按字符串形式(文本形式)存在的。

 

文件定位

●rewind()函数,格式: rewind(文件指针);     功能:使文件指针的读写位置重新返回到文件的开头。
rewind(fp);
 
●fseek()函数,格式: fseek(文件指针, 位移量w, 起始点s);     功能:使文件指针移到距起始点偏移w个字节处。
fseek(fp, 2, 0);  //使文件指针移到距起始点0偏移2个字节数
w:当w为正数时表示向文件尾方向移动,为负数时表示向文件头移动,为0表示不移动。
s:可以为0,1,2;s=0表示文件头,s=0表示当前位置,s=0表示文件末尾。
 
●ftell()函数,格式: ftell(文件指针);     功能:得到流式文件中的当前位置,用相对与文件开头的位移量来表示。若ftell()函数返回-1L表示出错。 
i = ftell(fp); //存放当前位置给变量i
if(i == -1L)
    printf("error\n"); //若调用的函数出错(如不存在此文件),则输出ERROR
 

文件的检测

常用的文件检测函数有两个 ferror()和clearerr()
ferror()函数,功能:若ferror()函数的返回值为0,则表示未出错,非0表示出错。格式:
ferror(fp)

clearerr()函数,功能:使文件错误标志和文件结束标志置为0。格式:
clearerr(fp)

 

20170104完

 

【c基础】之 文件及其操作