`
nsb601ns
  • 浏览: 13477 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

C语法基础之文件操作

 
阅读更多

C语法基础之文件操作
2009年10月18日
  
文件  C 文件概述
  所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。
  普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集。对于源文件、目标文件、可执行程序可以称作程序文件,对输入输出数据可称作数据文件。
  设备文件是指与主机相联的各种外部设备,如显示器、打印机、键盘等。在操作系统中,把外部设备也看作是一个文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。
  通常把显示器定义为标准输出文件,一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如前面经常使用的printf,putchar 函数就是这类输出。
  键盘通常被指定标准的输入文件,从键盘上输入就意味着从标准输入文件上输入数据。scanf,getchar 函数就属于这类输入。
  从文件编码的方式来看,文件可分为ASCII 码文件和二进制码文件两种。
  ASCII 文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII 码。二进制文件是按二进制的编码方式来存放文件的。
  二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C 系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。
  例如, 数5678 的存储形式为:
  00010110 00101110
  只占二个字节。
  文件指针
  在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。
  定义说明文件指针的一般形式为:FILE *指针变量标识符;
  文件的打开(fopen 函数)
  fopen 函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);
  其中,
  “文件指针名”必须是被说明为FILE 类型的指针变量;
  “文件名”是被打开文件的文件名;
  “使用文件方式”是指文件的类型和操作要求。
  “文件名”是字符串常量或字符串数组。例如:
  FILE *fp;
  fp=("file a","r");
  其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp 指向该文件。
  又如:
  FILE *fphzk
  fphzk=("c:\\hzk16","rb")
  其意义是打开C 驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。
  文件使用方式 意义
  “rt” 只读打开一个文本文件,只允许读数据
  “wt” 只写打开或建立一个文本文件,只允许写数据
  “at” 追加打开一个文本文件,并在文件末尾写数据
  “rb” 只读打开一个二进制文件,只允许读数据
  “wb” 只写打开或建立一个二进制文件,只允许写数据
  “ab” 追加打开一个二进制文件,并在文件末尾写数据
  “rt+” 读写打开一个文本文件,允许读和写
  “wt+” 读写打开或建立一个文本文件,允许读写
  “at+” 读写打开一个文本文件,允许读,或在文件末追加数据
  “rb+” 读写打开一个二进制文件,允许读和写
  “wb+” 读写打开或建立一个二进制文件,允许读和写
  “ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
  对于文件使用方式有以下几点说明:
  1) 文件使用方式由 r,w,a,t,b,+六个字符拼成,各字符的含义是:
  r(read): 读
  w(write): 写
  a(append): 追加
  t(text): 文本文件,可省略不写
  b(banary): 二进制文件
  +: 读和写
  2) 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
  3) 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
  4) 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。
  5) 在打开一个文件时,如果出错,fopen 将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:
  6) if((fp=fopen("c:\\hzk16","rb")==NULL)
  {
  printf("\nerror on open c:\\hzk16 file!");
  getch();
  exit(1);
  }
  这段程序的意义是,如果返回的指针为空,表示不能打开C 盘根目录下的hzk16 文件,则给出提示信息“error on open c:\ hzk16 file!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。
  7) 把一个文本文件读入内存时,要将 ASCII 码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII 码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。
  8) 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。
  文件关闭函数(fclose 函数)
  文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。
  fclose 函数调用的一般形式是:fclose(文件指针);
  对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:
  ??字符读写函数 :fgetc 和fputc
  ??字符串读写函数:fgets 和fputs
  ??数据块读写函数:freed 和fwrite
  ??格式化读写函数:fscanf 和fprinf
  下面分别予以介绍。使用以上函数都要求包含头文件stdio.h。
  字符读写函数fgetc 和fputc
  1. 读字符函数fgetc
  fgetc 函数的功能是从指定的文件中读一个字符,函数调用的形式为:字符变量=fgetc(文件指针);
  对于fgetc 函数的使用有以下几点说明:
  1) 在 fgetc 函数调用中,读取的文件必须是以读或读写方式打开的。
  2) 读取字符的结果也可以不向字符变量赋值,
  例如:
  fgetc(fp);
  但是读出的字符不能保存。
  3) 在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后,该位置指针将向后移动一个字节。 因此可连续多次使用fgetc 函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。
  2.写字符函数fputc
  fputc 函数的功能是把一个字符写入指定的文件中,函数调用的形式为:fputc(字符量,文件指针);
  说明几点:
  1) 被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。
  2) 每写入一个字符,文件内部位置指针向后移动一个字节。
  3) fputc 函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。
  字符串读写函数fgets 和fputs
  1. 读字符串函数 fgets
  函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:fgets(字符数组名,n,文件指针);
  其中的n 是一个正整数。表示从文件中读出的字符串不超过 n-1 个字符。在读入的最后
  一个字符后加上串结束标志'\0'。
  例如:
  fgets(str,n,fp);
  的意义是从fp 所指的文件中读出n-1 个字符送入字符数组str 中。
  说明:
  1) 在读出 n-1 个字符之前,如遇到了换行符或EOF,则读出结束。
  2) fgets 函数也有返回值,其返回值是字符数组的首地址。
  2. 写字符串函数 fputs
  fputs 函数的功能是向指定的文件写入一个字符串,其调用形式为:fputs(字符串,文件指针);
  其中字符串可以是字符串常量,也可以是字符数组名,或指针变量,例如:
  fputs(“abcd“,fp);
  其意义是把字符串“abcd”写入fp 所指的文件之中。
  数据块读写函数fread 和fwtrite
  C语言还提供了用于整块数据的读写函数。可用来读写一组数据,如一个数组元素,一个结构变量的值等。
  读数据块函数调用的一般形式为: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 中。
  格式化读写函数fscanf 和fprintf
  fscanf 函数,fprintf 函数与前面使用的scanf 和printf 函数的功能相似,都是格式化读写函数。两者的区别在于fscanf 函数和fprintf 函数的读写对象不是键盘和显示器,而是磁盘文件。
  fscanf(文件指针,格式字符串,输入表列);
  fprintf(文件指针,格式字符串,输出表列);
  其中:
  buffer 是一个指针,在fread 函数中,它表示存放输入数据的首地址。在fwrite 函数中,它表示存放输出数据的首地址。
  size 表示数据块的字节数。
  count 表示要读写的数据块块数。
  fp 表示文件指针。
  例如:fread(fa,4,5,fp);
  其意义是从fp 所指的文件中,每次读4 个字节(一个实数)送入实数组fa 中,连续读5 次,即读5 个实数到fa 中。
  文件的随机读写
  文件定位
  移动文件内部位置指针的函数主要有两个,即 rewind 函数和fseek 函数。
  rewind 函数前面已多次使用过,其调用形式为:rewind(文件指针);
  它的功能是把文件内部的位置指针移到文件首。
  fseek 函数用来移动文件内部位置指针,其调用形式为:fseek(文件指针,位移量,起始点);
  其中:
  “文件指针”指向被移动的文件。
  “位移量”表示移动的字节数,要求位移量是long 型数据,以便在文件长度大于64KB 时不
  会出错。当用常量表示位移量时,要求加后缀“L”。
  “起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
  其表示方法如下表。
  起始点 表示符号 数字表示
  文件首 SEEK_SET 0
  当前位置 SEEK_CUR 1
  文件末尾 SEEK_END 2
  还要说明的是fseek 函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。
  文件的随机读写
  常用fread 和fwrite 函数
  具体方法同上面介绍
  文件检测函数
  文件结束检测函数feof 函数
  调用格式:feof(文件指针);
  功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。
  读写文件出错检测函数
  ferror 函数调用格式:ferror(文件指针);
  功能:检查文件在用各种输入输出函数进行读写时是否出错。如ferror 返回值为0 表示未出错,否则表示有错。
  文件出错标志和文件结束标志置0 函数
  clearerr 函数调用格式:clearerr(文件指针);
  功能:本函数用于清除出错标志和文件结束标志,使它们为0 值。
  C库文件:
  C系统提供了丰富的系统文件,称为库文件,C 的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,包含了常量定义、 类型定义、宏定义、函数原型以及各种编译选择设置等信息另一类是函数库,包括了各种函数的目标代码,供用户在程序中调用。 通常在程序中调用一个库函数时,要在调用之前包含该函数原型所在的".h" 文件。
  Turbo C 头文件
  ALLOC.H 说明内存管理函数(分配、释放等)。
  ASSERT.H 定义 assert 调试宏。
  BIOS.H 说明调用 IBM―PC ROM BIOS 子程序的各个函数。
  CONIO.H 说明调用 DOS 控制台I/O 子程序的各个函数。
  CTYPE.H 包含有关字符分类及转换的名类信息(如 isalpha 和toascii 等)。
  DIR.H 包含有关目录和路径的结构、宏定义和函数。
  DOS.H 定义和说明MSDOS 和8086 调用的一些常量和函数。
  ERRON.H 定义错误代码的助记符。
  FCNTL.H 定义在与 open 库子程序连接时的符号常量。
  FLOAT.H 包含有关浮点运算的一些参数和函数。
  GRAPHICS.H 说明有关图形功能的各个函数,图形错误代码的常量定义,正对不同驱动程序的各种颜色值,及函数用到的一些特殊结构。
  IO.H 包含低级 I/O 子程序的结构和说明。
  LIMIT.H 包含各环境参数、编译时间限制、数的范围等信息。
  MATH.H 说明数学运算函数,还定了 HUGE VAL 宏, 说明了matherr 和matherr 子程序用到的特殊结构。
  MEM.H 说明一些内存操作函数(其中大多数也在STRING.H 中说明)。
  PROCESS.H 说明进程管理的各个函数,spawn…和EXEC …函数的结构说明。
  SETJMP.H 定义 longjmp 和setjmp 函数用到的jmp buf 类型,说明这两个函数。
  SHARE.H 定义文件共享函数的参数。
  SIGNAL.H 定义SIG[ZZ(Z] [ZZ)]IGN 和SIG[ZZ(Z] [ZZ)]DFL 常量,说明rajse 和signal 两个函数。
  STDARG.H 定义读函数参数表的宏。(如vprintf,vscarf 函数)。
  STDDEF.H 定义一些公共数据类型和宏。
  STDIO.H 定义 Kernighan 和Ritchie 在Unix System V 中定义的标准和扩展的类型和宏。还定义标准I/O 预定义流:stdin,stdout 和stderr,说明 I/O 流子程序。
  STDLIB.H 说明一些常用的子程序:转换子程序、搜索/ 排序子程序等。
  STRING.H 说明一些串操作和内存操作函数。
  SYS\STAT.H 定义在打开和创建文件时用到的一些符号常量。
  SYS\TYPES.H 说明 ftime 函数和timeb 结构。
  SYS\TIME.H 定义时间的类型time[ZZ(Z] [ZZ)]t。
  TIME.H 定义时间转换子程序asctime、localtime 和gmtime 的结构,ctime、difftime、 gmtime、 localtime 和stime 用到的类型,并提供这些函数的原型。
  VALUE.H 定义一些重要常量,包括依赖于机器硬件的和为与Unix System V相兼容而说明的一些常量,包括浮点和双精度值的范围。
  小结
  1. C系统把文件当作一个“流”,按字节进行处理。
  2. C文件按编码方式分为二进制文件和 ASCII 文件。
  3. C语言中,用文件指针标识文件,当一个文件被 打开时,可取得该文件指针。
  4. 文件在读写之前必须打开,读写结束必须关闭。
  5. 文件可按只读、只写、读写、追加四种操作方式打开,同时还必须指定文件的类型是
  二进制文件还是文本文件。
  6. 文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式进行读写。
  7. 文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。         
分享到:
评论

相关推荐

    【C语言基础语法用例+两个基础实战游戏代码解析】.docx

    9. [文件操作](#文件操作) ## 简介 C语言是一种通用的、高级的编程语言,由Dennis Ritchie在20世纪70年代初开发。它被广泛应用于系统软件开发、嵌入式系统和游戏开发等领域。 C语言具有简洁的语法和强大的表达...

    c语言之语法代码集,文件操作 数组 指针 结构体 共同体

    这里有c语言的大多数语法实例供参考, 包括基础关键字, 宏定义 ,指针,结构体,共同体,大小端转换,数据交换,递归,零长数组的使用,等.供学习与借鉴

    C语言训练营:从易到难,巩固语法、应对考试与竞赛

    在提升篇中,我们涵盖了更为复杂的C语言语法和常见的编程问题,例如指针、内存管理、文件操作等。这些知识点是学生在应对学校考试和竞赛中常遇到的难点。通过解决提升篇中的练习题,学生可以提高解决问题的能力和...

    Python基础语法PPT

    Python基础语法PPT,说明了Python与C语言之间最大的两个区别,其中讲解的Python语法主要包括:Python基础知识、函数、面向对象、数据类型、条件&循环、文件操作、模块、异常,并列出了Python中常见数据类型对应的...

    WMLScript语言基础(语法,函数,变量,操作)

    基本原则 变量与数据类型 总的来说,由于WMLScript是以C语言为蓝本制定的,因此其语法特征和C语言很相象。在学习的过程当中,可以参考C语言。 本节介绍WMLScript 中的两个重要概念:变量和数据类型。 ...

    明解C语言入门

    《明解C语言》图文并茂,示例丰富,设有190段代码和164幅图表,对C语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于C语言语法以及一些难以理解的概念,均以精心绘制的示意图,清晰、通俗...

    明解C语言_清晰版

     《明解c语言》图文并茂,示例丰富,设有190段代码和164幅图表,对c语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于c语言语法以及一些难以理解的概念,均以精心绘制的示意图,清晰、...

    学生信息系统管理-C语言基础

    C语言基础课程项目,学生信息系统管理,熟悉C语言基本语法,以及对文件的操作。

    C++学习指南(语法篇)代码+pdf(pdf可直接打印)

    同时,书中还讲解了初级程序员所必须掌握的知识和技术,如“单步调试”,“编码规范”, ANSI函数库,文件操作,标准模板库STL的使用。 学习方法:看视频 -> 抄例子 -> 做题库 -> 看书复习, 反复迭代推进! (视频是...

    【试读】明解C语言(第3版):入门篇

    本书图文并茂,示例丰富,第3版从190段代码和164幅图表增加至205段代码和220幅图表,对C语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于C语言语法以及一些难以理解的概念,均以精心绘制...

    努力学会C语言需要做到的六个方面.docx

    C语言标准库提供了大量的函数,如字符串处理函数、数学函数、文件操作函数等。熟悉C语言标准库的使用可以大大提高程序开发效率。 下面是一个使用C语言标准库中字符串处理函数的程序,将两个字符串拼接起来: ```c ...

    Linux的makefile语法规则

    一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为...

    明解C语言.[日]柴田望洋(带详细书签)

     《明解C语言》图文并茂,示例丰富,设有190段代码和164幅图表,对C语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于C语言语法以及一些难以理解的概念,均以精心绘制的示意图,清晰、...

    "学习C语言必备!谭浩强第五版C语言代码资源分享"

    谭浩强的《C语言程序设计》第五版共分为14章,从C语言的基础语法、数组、指针、函数、结构体、文件操作等方面进行了详细的讲解。每一章都包含了大量的代码示例,这些示例不仅能够帮助读者理解书中的理论知识,还能够...

    Linux C程序设计王者归来Part1

     涵盖Linux C编程基础、开发环境、进程操作、文件操作、网路编程和Shell编程  视频教学:专门录制了16.8小时高清配套教学视频,赠送7小时专题视频,便于读者更加高效、直观地学习  内容全面:涵盖Linux下C语言...

    C语言程序设计课件第一版

    文件操作和预处理指令是C语言编程中的其他重要方面,它们可以帮助您更好地处理文件和优化代码。 通过学习这份课件,您将可以轻松地掌握C语言编程的基本技能,为进一步深入学习和应用打下坚实的基础。祝您学习愉快!

    明解C语言(第3版)入门篇.[日]柴田望洋(带目录)

    《明解C语言 第3版 入门篇》图文并茂,示例丰富,第3版从190段代码和164幅图表增加至205段代码和220幅图表,对C语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于C语言语法以及一些难以...

    明解C语言.[日]柴田望洋(详细书签)

     《明解C语言》图文并茂,示例丰富,设有190段代码和164幅图表,对C语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于C语言语法以及一些难以理解的概念,均以精心绘制的示意图,清晰、...

    C语言程序设计基础入门教学视频全集(23讲)

    教程描述:C语言程序设计基础入门教学视频,会学习数据在C语言中是如何被存储、管理和操作的。具体我们会了解数组与字符串是如何组织、存储并在程序里去对它们进行操作;函数的概念和使用方法;指针和Struct等数据...

    C语言标准教程光盘源码

    第3篇是能力提高,通过大量实例将函数、数组、指针、结构体、文件操作等知识介绍给读者。第4篇是高级实践,通过对数据结构、算法的介绍和一个项目案例,详细介绍了C语言中的开发技巧和项目开发过程,提高读者的编程...

Global site tag (gtag.js) - Google Analytics