发布日期:2015-12-29 17:23 来源: 标签: 编程语言 C教程 C语言文件定位 C语言文件读写
本章我们主要学习C语言中是如何对文件进行读写并且对文件进行定位的,下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
文件的操作:文件指针实际上是批向一个结构体类型的指针。 
(1)  文件的打开,关闭: 
FILE *指针变量名;             //    定义文件指针 
fopen(“文件名”,“文件使用方式”);    //  (打开文件)   例如:fopen(“c:\\file_a”,”r”);
fclose(文件指针)           //  (关闭文件)     例如:fclose(fpout); 
判断文件是否能打开,需写入: 
FILE * fp; 
if((fp=fopen("文件名","打开方式"))==NULL) //    打开文件出错的话 

printf("cannot open file\n"); 
exit(0);                                //     exit(1)出错退出。exit(0) 正常退出
 }  
文件打开方式说明: 
1.   r ,凡用“r”打开一个文件时,该文件必须已经存在, 且只能从该文件读出 
2.   w,用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
3.   a,要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。 
4.   +, 与上面的字符串组合,以读和写的方式打开文件
2).文件的读写 
读写数据将通过调用标准输入输出函数来完成。这些函数主要包括:    
1).fgetc()和getc():从制定文件中一次读取一个字符        fputc()和putc():一次输出一个字符到指定文件      
2).fgets():从指定文件中一次读取一个字符串        fputs():一次输出一个字符串到指定文件    
3).fread():从指定文件中一次读取一个数据块        fwrite():一次输出一个数据块到指定文件    
4).fscanf():从指定文件中按格式读取数据 
       fprintf():按指定格式将数据输出到指定文件中
详细介绍: 
1.读写字符fgetc和fputc:字符读写函数是以字符(字节)为单位的读写函数。每次可从文件读出或向文件写入一个字符。 
形式:字符变量=fgetc(文件指针) 
例如:ch=fgetc(fp);   // 从打开的文件fp中读取一个字符并送入ch中。    
形式:fputc(变量名,文件指针);  
例如: fputc(a,fp)   //  把变量a的值写入fp所指向的文件中。   
判断是否出错,需写入:
while((ch=fgetc(fp))!=EOF)    //  当文件内容没有执行错误时,顺利执行下一句 
2.读写字符串fgets和fouts:从指定的文件中读写一个字符串到字符数组中。  
形式: fgets(字符数组名,n,文件指针)其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'。
例如: 
fgets(str,n,fp)  //从fp所指的文件中读出n-1个字符送入字符数组str中。   
形式: fputs(字符串,文件指针); 
   其中字符串可以是字符串常量,也可以是字符数组名,或指针变量。
例如: fputs(“abcd“,fp)    //   其意义是把字符串“abcd”写入fp所指的文件之中。
3.数据块读写函数fread和frite:用来读写一组数据。 
读数据块函数调用的一般形式为:    fread(buffer,size,count,fp);     
写数据块函数调用的一般形式为:    fwrite(buffer,size,count,fp);  
其中: 
buffer  是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。                        
size   表示数据块的字节数。         
count  表示要读写的数据块块数。     
fp 表示文件指针。 
例如: 
fread(fa,4,5,*fp);   
其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。 
fread(&stu[i],sizeof(struct 结构体名),1,fp); 
其意义是从fp所指的文件中,每次读结构体的一个变量名送入数组stu[i]中,连续读1次,即读1个结构体到stu[i]中。
3.格式化读写函数fscanf和fprintf:  函数的读写对象不是键盘和显示器,而是文件. 函数的调用格式为:
fscanf(文件指针,格式字符串,输入表列);//   fscanf(fp,"%d%s",&i,s);     
fprintf(文件指针,格式字符串,输出表列); // fprintf(fp,"%d%c",j,ch);
3).文件定位 
使“读写位置指针”直接指向指定的读写位置。函数包括:       
fseek():可移动位置指针到指定位置上       
ftell():可获得当前位置指针的位置 
rewind():“反绕”函数,可使位置指针回到文件的开头
详细介绍:
1.fseek()函数:    一般形式:fseek(fp, offset, origin)
fp是文件指针,offset是以字节为单位的位移量,为长整型数;origin是起始点,用以指定位移量是以哪个位置为基准的,起始点既可用标识符来表示,也可用数字来代表。            
标识符        数字    代表的起始点            
SEEK_SET      0         文件开始            
SEEK_END     2         文件末尾 
SEEK_CUR      1        文件当前位置 
例如:fp已指向一个二进制文件,能使位置指针从文件的开头向文件尾部移动20个字节的fseek()函数的调用形式如下:    
 fseek(fp, 20L, SEEK_SET) 
例如:
fp已指向一个二进制文件,能使位置指针从文件尾部向文件开头移动10个sizeof(int)的函数的调用形式如下:           
fseek(fp, -10L*sizeof(int), SEEK_END)  
对于文本文件,位移量必须为0。 
例如:fp已指向一个文本文件,能使位置指针移到文件起始位置的fseek()函数形式如下:          
fseek(fp, 0L, SEEK_SET) 
例如:fp以指向一个文本文件,能使位置指针移到文件末尾的fseek()函数的调用形式如下:          
fseek(fp, 0L, SEEK_END)
2.ftell()函数:
调用ftell()函数可以得到当前位置指针相对于文件起始位置的字节数。函数调用出错时,返回-1L. 
例如:当打开一个文件时,通常并不知道该文件的长度,通过以下程序段可以求出该文件的字节数: 
fseek(fp, 0L, SEEK_END);   //把位置指针移到文件末尾           
t = ftell(fp);             //求出文件的总字节数     
再例如:某二进制文件中存放的struct st结构体类型数据,可以通过以下程序,可求出该结构体类型     
数据块的个数: 
fseek(fp, 0L, SEEK_END);            
t = ftell(fp); 
n = t/sizeof(struct st);
3.rewind()函数:又称“反绕”函数,能使位置指针回到文件的开头。
函数调用形式如下:            
 rewind(fp); 
fp为文件指针,此函数没有返回值。

相关评论

专题信息
    C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。