C语言中文件相关操作
C语言文件指针(类似于 JAVA中 File file = new File();)
在C语言中用一个指针变量指向一个文件,这个指针称为文件指针 格式: FILE * 指针变量标识符;
文件的打开 (fopen函数)
fopen函数用来打开一个文件,其调用的一般形式为: 文件指针变量名 = fopen (文件名, 使用文件方式); 其中: "文件指针名"必须是被说明为FILE 类型的指针变量; "文件名" 是被打开文件的文件名 "使用文件方式" 是指文件的类型和操作要求 "文件名" 是字符串常量或字符串数组
文件的关闭函数(fclose函数)
文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误 fclose 函数调用的一般形式是: fclose(文件指针); 注意:正常完成关闭文件操作时,fclose函数返回值为0 .如返回非零值则表示有错误发生 如果文件写操作时,没有进行关闭,可能会导致文件写入失败
例:
操作文件的步骤: 1) 引入头文件 stdio.h 2) 建立文件指针 FILE *fp = NULL; 3) 打开文件 fopen(文件名,操作方式); fp=fopen("a.txt","r");//r 是操作方式 //如果打开成功,会返回文件的首地址 失败,会返回NULL; 4) 操作文件 5) 关闭文件 fclose(文件指针);
文件的使用方式:
r: 打开一个已经存在的文件,准备从文件中读取数据.不能向文件写数据 w: 创建一个新文件,准备向文件写入数据.不能从文件中读取数据,如果文件已经存在,这个文件会被覆盖 a: 打开一个已存在的文件,准备在文件尾部追加数据.不能从文件中读取数据,如果文件不存在,则创建这个文件准备写入数据 r+: 打开一个已存在的文件,准备读写.即可以读取数据,也可以写入数据 w+: 创建一个新文件,准备读写,如果文件已存在,则覆盖文件 a+: 等价于a,但可以从文件中读取数据 t: 打开一个文本文件 b: 打开一个二进制文件
文件的注意事项:
1)文件使用方式由 r、w、a、t、b和+ 六个字符拼成,各字符的含义是: r (read) :读 w (write) :写 a (append):追加 t (text): 文本文件,可省略不写 b (banary): 二进制文件 + : 读和写 2) 凡用"r" 打开一个文件时,该文件必须已经存在,且只能从文件读出 3) 用"w" 打开的文件只能向该文件写入.若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件 4) 若要向一个已存在的文件追加新的信息,只能用"a"方式打开文件.如果文件不存在,也会自动帮我们创建 5) 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。 在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理.因此常用以下程序段打开文件: 例如: //定义文件指针 FILE *fp = fopen("a.txt","r"); if(fp!=NULL){ //文件打开成功 }else{ //文件打开失败 printf("文件读取失败!按任意键退出~"); getch();//等待用户输入一个字符后,再退出 exit(1);//程序退出 } 这段程序的意义是,如果返回的指针为空,表示不能打开a.txt文件,则给出提示信息,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示.在这里,该行的作用是等待,只有当用户从键盘敲任一建时,程序才会继续执行,因此用户可利用这个等待时间阅读出错提示.敲键后执行exit(1)退出程序 6) 把一个文本文件读取内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间.对二进制文件的读写不存在这种转换 7) 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用
字节读写函数:fgetc和fputc
一次读取一个字节 读取到EOF 表示到达了文件末尾则读取结束
字符串读写函数:fgets 和 fputs
fputs有个返回值 ,返回的内容代表当前写入的字数 fgets("数组名称","读取的字节数","文件指针"); 注意: 1) fgets读取的时候,当文件内容读取完毕后,会给字符串加上结束符\0 2) fgets读取的时候,遇到\n或者EOF,读取结束
数据块读写函数 fread 和 fwrite
C语言还提供了用于整块数据的读写函数.可用来读写一组数据,如一个数组元素,一个结构变量的值等 读数据块函数调用的一般形式为: fread(buffer,size,count,fp); 写数据块函数调用的一般形式为: fwrite(buffer,size,count,fp); 其中: buffer:是一个指针,在fread函数中,它表示存放输入函数的首地址.在fwrite函数中,它表示存放输出数据的首地址 size: 表示函数块的字节数 count: 表示要读写的数据块块数 fp:表示文件指针
格式化写入 fprintf 和 fscanf
//使用fprintf函数,格式化写入数据到文件中 fprintf(fp,"%d#%d",a,b); //以特定的格式写入数据 fscanf(fp,"%d#%d",a,b);
文件的随机读写实现
实现随机读写的关键是按要求移动位置指针,这成为文件的定位 移动文件内部位置指针的函数主要由两个 ,即 rewind() 和 fseek() fseek函数 和 rewind函数 rewind(文件指针) 把文件指针重新制定文件的首位置 fseek函数 格式 : fseek(文件指针,位移量,起始点); 文件指针: 指向被移动的文件 位移量: 表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB是不会报错,当用常量表示位移量时,要求加后缀 "L" 起始点: 表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置 和文件尾 文件首 SEEK_SET 数字 0 当前位置 SEEK_CUR 数字 1 文件末尾 SEEK_END 数字 2 例如: fseek(fp,100L,0); 其意义是把位置指针移到离文件首100个字节处 注意: fseek函数一般用于二进制文件,在文本文件中由于要进行转换,故往往计算的位置会出现错误 文件结束检测函数 feof函数 格式: feof(文件指针); 功能: 判断文件是否处于文件结束位置,如文件结束,则返回为1,否则为0 注意: 这个方法会多执行一次,一般首选 EOF 检测错误信息: ferror 函数 ferror(文件指针); 文件出错标志和文件结束标志置0函数 clearerr函数调用格式: clearerr(文件指针) 作用: 本函数用于清除出错标志和文件结束标志,使它们为0值