加文

希望是美好的……
随笔 - 0, 文章 - 209, 评论 - 0, 引用 - 0
数据加载中……

C文件操作

文件概述

1、文件:存储在外部介质上一组相关数据的集合。

  例如,程序文件就是程序代码的集合;数据文件是数据的集合。

2、文件名:操作系统以文件为单位对数据进行管理,每个文件有一个名称,文件名是文件的标识,操作系统通过文件名访问文件。

  例如,通过文件名查找,打开文件,然后读取或写入数据。

3、磁盘文件、设备文件

(1)磁盘文件:文件一般保存在磁介质(如软盘、硬盘)上,所以称为磁盘文件。
(2)设备文件:操作系统还经常将与主机相连接的I/O设备(如键盘-输入文件、显示器、打印机-输出文件)也看作为文件,即设备文件。很多磁盘文件的概念、操作,对设备文件也同样有意义,有效。

4、ASCII文件、二进制文件

根据文件的组织形式,文件可以分为ASCII文件和二进制文件。
(1)ASCII文件(文本文件):每个字节存放一个ASCII码,代表一个字符。ASCII文件可以阅读,可以打印,但是它与内存数据交换时需要转换。
(2)二进制文件:将内存中的数据按照其在内存中的存储形式原样输出、并保存在文件中。二进制文件占用空间少,内存数据和磁盘数据交换时无须转换,但是二进制文件不可阅读、打印。

  例如:同样的整数10000,如果保存在文本文件中,就可以用notepad,edit等文本编辑器阅读,也可以在dos下用type显示,它占用5个字节;如果保存在二进制文件中,不能阅读,但是我们知道一个整数在内存中用补码表示并占用2个字节,所以如果保存在二进制文件中就占用2个字节。
文本文件/二进制文件不是用后缀来确定的,而是以内容来确定的,但是文件后缀往往隐含其类别,如*.txt代表文本文件,*.doc,*.bmp,*.exe二进制文件。

5、缓冲文件系统、非缓冲文件系统:

(1)缓冲文件系统:系统自动地在内存中为每个正在使用的文件开辟一个缓冲区。在从磁盘读数据时,一次从磁盘文件将一些数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个将数据送给接受变量;向磁盘文件输出数据时,先将数据送到内存缓冲区,装满缓冲区后才一起输出到磁盘。减少对磁盘的实际访问(读/写)次数。ANSI C只采用缓冲文件系统
(2)非缓冲文件系统:不由系统自动设置缓冲区,而由用户根据需要设置。

  C语言中,没有输入输出语句,对文件的读写都是用库函数实现的

文件类型指针

1、文件类型(结构体)- FILE类型
  FILE类型是一种结构体类型,在stdio.h中定义,用于存放文件的当前的有关信息。

2、文件指针变量(文件指针)
  通常对FILE结构体的访问是通过FILE类型指针变量(简称:文件指针)完成,在打开一个文件后,系统开辟一个文件变量并返回此文件的文件指针;将此文件指针保存在一个文件指针变量中,以后所有对文件的操作都通过此文件指针变量完成;直到关闭文件,文件指针指向的文件类型变量释放。

例如:
fp=fopen("mydata.txt",...); 
/* 打开文件时,系统开辟一个文件变量,并返回文件指针,将此指针赋值(保存)给文件指针变量fp */
fclose(fp); 
/* 关闭文件,释放文件指针fp指向的文件变量 */

对文件的操作的步骤:先打开,后读写,最后关闭。

文件的打开(fopen函数)

1、文件的打开后才能进行操作,文件打开通过调用fopen函数实现。
调用fopen的格式是:
open(文件名,打开方式或使用方式);

注意:一定将函数返回的文件指针赋值给"文件指针变量"。

例如:
FILE *fp;
fp=fopen("d:\\a1.txt","r");

  文件打开一定要检查fopen函数的返回值。因为有可能文件不能正常打开。不能正常打开时fopen函数返回NULL。
可以用下面的形式检查:
if((fp=fopen(...))==NULL){ printf("error open file\n"); return; }

说明:
(1)打开d:盘根目录下文件名为a1.txt的文件,打开方式"r"表示只读。
(2)fopen函数返回指向d:\a1.txt的文件指针,然后赋值给fp,fp->此文件,即fp与此文件关联。
(3)文件名包含文件名.扩展名;路径要用"\\"表示。
(4)文件打开方式包含下面几类表示打开方式的关键词,不同类的可以组合。
  "r"方式:只能从文件读入数据而不能向文件写入数据。该方式要求欲打开的文件已经存在
  "w"方式:只能向文件写入数据而不能从文件读入数据。如果文件不存在,创建文件,如果文件存在,原来文件被删除,然后重新创建文件(相当覆盖原来文件)。
  "a"方式:在文件末尾添加数据,而不删除原来文件。该方式要求欲打开的文件已经存在
  "+"("r+,w+,a+"):均为可读、可写。但是"r+","a+"要求文件已经存在,"w+"无此要求;"r+"打开文件时文件指针指向文件开头,"a+"打开文件时文件指针指向文件末尾。
  "b、t":以二进制或文本方式打开文件。默认是文本方式,t可以省略。读文本文件时,将"回车"/"换行"转换为一个"换行";写文本文件时,将"换行"转换为"回车/换行"。
(7)程序开始运行时,系统自动打开三个标准文件:标准输入,标准输出,标准出错输出。一般这三个文件对应于终端(键盘、显示器)。这三个文件不需要手工打开,就可以使用。标准文件:标准输入,标准输出,标准出错输出对应的文件指针是stdin,stdout,stderr。

文件的关闭(fclose函数)

文件使用完毕后必须关闭,以避免数据丢失。 
格式:fclose(文件指针);


文件的读写

常用的文件读写函数:
1、字符读写函数:fgetc,fputc
2、字符串读写函数:fgets,fputs
3、格式化读写函数:fscanf,fprintf
4、数据块读写函数:fread,fwrite
说明:
1、这些函数都以f(file)开头。
2、这些函数都要使用打开文件时获得的文件指针。
3、前三类函数与标准I/O函数使用基本相同。
4、一般,对于文本文件使用"顺序访问"方式操作,对于二进制文件使用"随机访问"方式操作

posted on 2012-04-17 12:36 加文 阅读(222) 评论(0)  编辑 收藏 引用 所属分类: C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理