文件操作

来源:互联网 发布:mac air屏幕尺寸 编辑:程序博客网 时间:2024/06/04 19:49

1.对c语言的数据处理中,一般对数据的输入输出处理都是以终端为对象;从键盘输入数据,其运行结果最终打印在终端显示器上。实际应用中,有时候我们并不想在终端上打印出结果,而是希望把数据输出到磁盘上面存放,而需要使用时再从磁盘中把数据给读出来(就要用到磁盘文件)。

2.所谓文件:一般是指存储在计算机外部介质上的一组相关数据的集合。一般可分为“程序文件”和“数据文件”。

3.数据文件的存储形式有两种:ASCII码文件(按照ASCII码存储)与二进制文件(按照二进制码存储)。
(1) ASCII码文件
ASCII文件又被称为“文本文件”,它的每一个字节存放一个ASCII代码,代表一个字符。特点:便于字符的输入/输出处理;占用存储空间大。
(2)二进制文件
二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放一个字节并不对应一个字符,特点:占用存储空间小。

如:int a = 1000;这里1000若是用ASCII码形式存放到磁盘上,占用5和字节;而用二进制形式,则只用4字节。

这里写图片描述

4.文件的操作是通过一个名为FILE的结构体类型指针来管理文件的读写操作的(流程一般为:打开文件,读/写文件,关闭文件);该结构体类型是定义在<stdio.h>头文件中,各成员变量如下:

typede struct { int _fd;         //文件代号 int _cleft;      //文件缓冲区所剩字节数 int _mode;       //文件使用模式 char *nextc;     //下一个等待处理的字节地址 char *buff;      //文件缓冲区首地址}

FILE是typedef自定义的结构类型,若要读写文件,得先定义一个指向FILE结构体类型的指针,把文件的首地址赋给该指针变量。如:FILE *fp;此时fp即指向要读写的文件的内存首地址。

(1)打开文件 fopen()函数

FILE *fp;fp=fopen(文件名称,文件的使用方式);函数功能:返回一个指向FILE类型的指针。注:打开文件的时候,得对其进行判断,看是否打开成功。若成功,返回一个指向FILE结构体类型的指针并赋给文件指向变量(这里是fp),从而把指针与文件联系在一起;若失败了,fopen()函数则返回NULL值。所以一般采用如下形式:FILE *fp;if((fp=fopen("filename","r") == NULL) {   printf("can not open this file.\n");   exit(0);  //exit (EXIT_FAILURE); }

(2)关闭文件 fclose()

fclose(文件指针变量);如:fclose(fp);函数功能:使文件指针变量与文件“脱离关系”,也就是该文件指针不再指向该文件,此后便不能通过该文件指针来对其相连的文件进行读写操作。注:fclose()函数若成功关闭了文件,则返回0;若关闭文件失败,则返回EOF;如:if(fclose(fp) !=0)     {       printf("Error in closing file.\n");       exit(EXIT_FAILURE);    }

(3)读文件字符函数fgetc()

调用形式:ch = fgetc(fp);函数功能:从指定的文件读入一个字符,该文件必须是以读/读写的方式打开的。其中fp为文字指针变量,ch为字符变量。

(4)写文件字符函数fputc()

调用形式:fputc(ch,fp);函数功能:将字符ch的值输出到fp所指向的文件中去;其中ch是要输出的字符,fp是文件指针变量,并在fp所指向的文件已经以写/读写的方式打开。

示例:该程序的功能是读取文件中的所有字符个数,包含空格符等,最后打印出来结果。

#include<stdio.h>#include<stdlib.h>int main(void)  {    FILE *fp;    char ch;    int count=0;      //e./123.txt中内容是:hello world ni hao ma.    if ((fp=fopen("e:/123.txt","r"))==NULL)    {     printf ("error.\n");     exit (EXIT_FAILURE);    }    while ((ch=fgetc(fp))!=EOF)      {        count++;      }    printf ("文件%s 中包含 %d 个单词.\n","e:/123.txt",count);    fclose(fp);  system ("pause");  return 0;  }

打印结果为:

这里写图片描述

附:使用fgetc()和fputc()函数读写字符时遇到文件结束符,则函数会返回一个文件结束标志EOF,EOF在stdio.h中定义为-1.。同时ANSI C提供了一个feof()函数来判断文件是否真的结束。若是文件结束,函数feof(fp)的值为1(真),否则为0(假)。

1 0