现在的位置: 首页 > 综合 > 正文

文件操作总结

2013年01月02日 ⁄ 综合 ⁄ 共 2001字 ⁄ 字号 评论关闭

1,概念与定义

C语言引入流式文件的概念,即把文件看成是一个个字符(字节)的数据顺序组成;根据数据的组织形式,分为ASCII文件和二进制文件

(1)ASCII文件:即文本文件,每个字节存放一个ASCII编码,代表一个字符

(2)二进制文件:把内存中的数据按其在内存中的存储形式原样输入到磁盘上存放

用ASCII形式输出与字符一一对应,一个字节代表一个字符,因而便于对字符进行逐个处理,也便于输出字符,但一般占用存储空间较大,而且要花费时间进行二进制和ASCII码之间的转换;

用二进制形式输出,可以节省外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式;一般中间结果需要暂时存放在外存的,以后又要输入内存的话,常用二进制文件保存。

 

2,文件的打开与关闭

 

打开:通过fopen()函数来打开一个文件

FILE *fp;

fp = fopen(文件名,使用文件方式);

例如fp = fopen("C:\\exp\\1.txt","rb");注意转义字符

常用形式

if((fp = fopen("file1","r")) == NULL)

         {

                   printf("can not open the file");

                   exit(0)

         }

不能打开的话文件返回一个空指针NULL;

 

在向计算机输入文本文件时,将回车换行符转换为一个换行符,字输出时把换行符转化为回车和换行符。用二进制文件时,不进行这种转换,在内存中的数据形式与输出到外部文件的数据显示完全一致。

关闭:fclose(fp);关闭顺利返回0,否则返回EOF(-1);

 

3,文件的读写

 

(1)fputc(ch,fp);输出成功返回输出的字符,失败返回EOF;

   ch = fgetc(fp);判断文件是否结束

ch = fgetc(fp);

while(ch != EOF)

{

         putchar(ch);

         ch = fgetc(fp);

}

判断文件结束的另一方法feof(fp)在上一篇详细讨论过,略.

 

(2)fread函数和fwrite()函数

fread(bufffer,size,count,fp);从fp读count个size大小的数据到buffer

fwrite(buffer,size,count,fp);从buffer处向fp写count个size大小的数据

buffer是一个指针;

fread和fwrite函数一般用于二进制文件的输入输出,因为他们是按数据块的长度来处理输入输出数据的,在发生字符转换的情况下很可能与原来设想的情况不一样;

 

(3)fscanf函数和fprintf函数

fprintf(文件指针,格式字符串,输出列表);

fscanf(文件指针,格式字符串,输出列表);

这两个函数对磁盘文件读写使用方便,容易理解,但在输入时要将ASCII码转化为二进制(在内存中),输出时又要转换回来(要显示文本文件),花费时间比较多,在内存与磁盘频繁交换数据的时候不宜采用;

 

4,其他读写函数

(1)putw()和getw()函数

putw(10,fp);

i = getw(fp);

用来从磁盘文件里读写一个字(整数);如果所用的C编译器库函数不包括这两个函数,也可以自己去实现:

putw(int i,FILE *fp)

{

         char *s;

         s = &i;

         putc(s[0],fp);

         putc(s[1],fp);

         return(i);

}

(2)读写其他类型数据的函数

我们也可以自己去写,例如定义一个向磁盘文件读写实数(用二进制方式)的函数;

void putfloat(float num,FILE *FP)

{

         char *s;

         int count;

         s = #

         for(count = 0;count < 4;count ++) put(s[count],fp);

}

(3)fgets()函数和fputs()函数、

fgets(str,n,fp);输入n-1个字符,然后在最后加'\0';如果在读入n-1个字符之前就遇到EOF,读入即结束;此函数成功则返回str的首地址;

fputs("china",fp);字符串末尾的'\0'不输出,若输出成功,函数值为0,否则为EOF;

 

5,文件的定位

 

(1)rewind()函数

rewind(fp);文件指针返回文件开头

 

(2)fseek()函数和随机读写

fseek(<文件类型指针>,<位移量>,<起始点>);

起始点:0文件开始 1当前位置 2文件末尾

位移量是long型,单位为字节,如100L,-10L等;

 

(3)i = ftell(fp);获取当前位置;

如果返回值为-1表示出错

i = ftell(fp);

if(i == -1L) printf("error");

抱歉!评论已关闭.