#这只是身为我结合书本的个人的理解,肯定有很多错的地方,请勿喷

利用文件

一、文件概述

  一个文件是由一系列彼此有一定联系的数据结合构成,有文本文件和二进制文件区分。

(1)文本文件:

  文本文件是以字节为单位进行写入或读出,一般来说,说明性的文档、c语言的源程序文件等都是文本文件。

(2)二进制文件:

  二进制文件则以变量、结构体等数据块为单位进行读写,一般来说某门功课的考试成绩或图像、声音等信息都是二进制文件。

二、文本文件的使用

  通常来说,文件的使用包括几个过程:文件的打开、文件的读写、文件的关闭,这几个过程都是同故宫文件指针来完成的。

(1)文件指针

  定义格式如:



FILE *fp;


  定义了之后,fp就可以用来指向文件了。需注意,FILE一定要是大写,同时记得使用文件指针进行文件的相关操作时候,在程序开头处一定要包含stdio.h。

(2)文件的打开

  使用格式:文件指针名=fopen("文件名","打开方式")。如:



fp=fopen("test.txt","r");//注意文件名包含后缀。如果文件名包含文件的路径,则按照该路径找到并打开文件。


  “打开方式”参数对应关系如下:

C语言知识补充之利用文件_字符串

   若成功打开,函数返回非零值,否则返回空指针(NULL)。实际使用的时候通常要检测操作是否成功,如:



FILE *fp;
if((fp=fopen("test.txt","r+"))==0)
{
printf("can't open this file\n");
exit(0);
}


(3)文件的关闭

  使用格式:fclose(文件指针名)

  功能描述:关闭文件指针指向的文件,最好用完一个立刻就关闭以节省内存。

  返回值:关闭成功返回0,否则返回-1。

(4)文件的读写  

I.文件结束检测



/*使用格式:feof(文件指针)
功能描述:测试文件指针所指向的文件是否已经读到文件尾部(因为文件指针就相当于书签)。
返回值:如果已经到文件末尾,返回1,否则返回0.
实际使用:当顺序读取文本文件中的全部字符时,常这样用:*/

while(!feof(fp))
{
c=fgetc(fp); //从文件中读一个字符赋值给变量c
.......
}


  II. 文件的操作

  从文件读取字符:



ch=fgetc(fp);
//功能描述:从fp所指定的文件中读取一个字符,并把该字符的ASCII码赋给变量ch
//返回值:如果fp已经到了文件末尾放回EOF(stdio.h在的话放回-1)


  往文件中写入字符:



fputc(ch,fp);
//功能描述:将变量ch代表字符写到fp指定的文件中
//返回值:写入成功返回ch的ASCII码,否则返回EOF(stdio.h在的话放回-1)


  从文件读取字符串:



//使用格式:fputs(字符串,文件指针)
//功能描述:将“字符串”写到文件指针所指向的文件中。
//注意点:字符串可以为数组名,也可以是指针。
//返回值:写入成功返回0,否则返回非零值。


  往文件写入字符串:



//使用格式:fputs(字符串,文件指针)
//功能描述:将“字符串”写到文件指针所指向的文件中。
//注意点:字符串可以为数组名,也可以是指针。
//返回值:写入成功返回0,否则返回非零值。


  从文件中按一定格式读取内容



//使用格式:fscanf(文件指针,格式串,输入项表)
//功能:从文件中按“格式串”所描述的格式输出到指定的内存单元
//注意点:用什么格式写入的就用什么格式读出。


  往文件中按照一定格式写入内容



//使用格式:fprintf(文件指针,格式串,输出项表)
//功能:按“格式串”所描述的格式把输出项写入文件中。
//返回值:成功,返回所写的字节数;失败,放回一个负数。


  光标位置的改变  

  读写文件开始的位置是由文件位置指针(类似于光标)决定的,每次新建文件默认指向开头。有关函数如下:



//使用格式:ftell(文件指针)
//功能:返回当前文件位置指针相对于文件开头的位移量,单位是字节。
//返回值:调用成功返回文件位置指针当前值,否则返回值为-1.



//使用格式:fseek(fp,offset,from)
//功能:将文件指针从from表示的位置移动offset个字节,成功返回0,失败非零。
//注意点:offset>0,顺序移动;offset<0,逆序移动。
//from=0是文件开头,from=1是文件当前指针位置,2是文件末尾



//使用格式:rewind(tp)
//功能:将文件位置指针移动到文件开始位置,并不带返回值。


三、二进制文件的读写:

  空。实际用到时再补充。