"); //-->
本来就不熟悉,近来发现用MATLAB处理文件时,不太方便,输出的文件还需要改正,正好熟悉一下C的文件操作。
在程序运行时候,常常需要将一些数据(运行的最终结果或中间结果)输出到磁盘上存放起来,以后需要时再从磁盘中输入到计算机内存。这里就需要用到磁盘文件。
C语言把文件分为两类:文本文件(ASCII文件,即平时的txt文件)和二进制文件(.dat文件)。ASCII文件的每一个字节存储一个字符。二进制文件把内存中的数据按其内存中的存储形式原样输出到磁盘上存放。。如1000,在ASCII文件中占了4个字节的存储空间('1','0','0','0'),而在二进制文件中只占2个字节的存储空间(一个低8位,一个放高8位)。
文件的操作:
1.打开一个文件,这里使用文件指针的方法<stdio.h>中有声明
FILE *fp;
fp = fopen(filename, "r"); //filename为一字符串类型"abc.txt","r"为模式控制子,表示只读。
2.文件的读取与写入
2.1fputc()和fgetc()函数
fputc(ch,fp); //将字符(ch的值)输出到fp所指向的文件中。返回一个值,如果写入成功,返回ch,否则返回EOF;
ch = fgetc(fp); //从指定的文件读入一个字符,同时fp指针向后移动一位,指向下一个元素。如果到达文件末尾返回EOF,否则正常返回。
ch = fgetc(fp);
while(ch != EOF) //EOF是不可输出字符,其ASCII码为-1,所以不能由键盘输入。
{
putchar(ch);
ch = fgetc(fp);
}
2.2.fread函数和fwrite函数
用fgetc()和fputc函数可以读写文件中的一个字符。但是一般要求依次读入一组数据,为此,讲解两个函数.
fread(buffer, size, count, fp);
fwrite(buffer, size, count , fp);
buffer读入或写出的数据的指针,size为要读写的字节数,count为要读写多少个size的数据项。fp为文件指针类型。
2.3.fprintf函数和fscanf函数
这两个函数与printf和scanf函数一样,都是格式化读写函数。一般调用格式为:
fprintf(文件指针,格式字符串,输出表列);
fscanf(文件指针,格式字符串。输入表列);
如:frpintf(fp,"%d,%6.2f", i,f); //输出到文件中为 100,6.20,注意中间还有个逗号
fcanf(fp,"%d,%6.2f",&i, &f); //格式化输入中也有个逗号,从而正确输入,注意f,d不能乱变,否则可能导致错误。
2.4 putw和getw函数
这两个函数用来对磁盘文件读写一个字(整数),调用如下: //(注:这两个函数只适用于:int类型函数);
putw(10, fp) ; //将整数10输出到fp指向的文件
i = getw(fp); //从文件读一个整数到内存中,赋给变量i;
2.5.fgets函数和fputs函数
fgets函数的作用是从指定文件读入一个字符串,如:fgets(str, n, fp);
其中n为要求得到的字符,但从fp指向的文件输入n-1个字符,然后再最后加入一个'\0'字符,然后把他们放入到字符数组str中。
fputs("china", fp); //将字符串"China"输入到fp指向的文件。字符串末尾的'\0'不输出。若输出成功,返回0,否则返回EOF。
3.文件的定位(很有用,不需要再我输入完一个文件后,只能关闭再打开才能读取了)
文件中有一个位置指针,指向当前读写的位置。如果顺序读写一个文件,每次读写一个字符,则读完一个字符后,该位置向后移动到下一个字符位置。为了方便操作,可以使用本模块的函数
3.1.rewind函数
使位置指针重新返回到文件的开头。。此函数无返回值
rewind(fp);
如下例:
while(!feof(fp1)) putchar(fgetc(fp1));
rewind(fp1);
while(!feof(fp1)) fputc(fgetc(fp1), fp2);
fclose(fp1);fclose(fp2);
3.2.fseek函数和随机读写
随文件随机读写的关键在于控制文件的位置指针。如果位置指针按需要移动到任何位置,就可以实现随机读写。
fseek(文件类型指针,位移量,起始点);
起始点用0、1、2代替,0代表“文件开始”,1为“当前位置”,2为“文件末尾”。
位移量是一个long型的整形变量(常量),在数字末尾加一个L,自动成为long型。
4.关闭文件
文件使用完毕必须要将其关闭掉,因为输入是缓冲输入,所以如果不关闭会造成文件的丢失。
fclose(fp);
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。