`
有贝无患
  • 浏览: 1149 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

C语言 文件的输入输出函数

阅读更多

文件的输入输出函数

       键盘、显示器、打印机、磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成。而在编程时使用最多的要算是磁盘文件, 因此本节主要以磁盘文件为主, 详细介绍C语言、C++提供的文件操作函数, 当然这些对文件的操作函数也适合于非磁盘文件的情况。
另外, C语言提供了两类关于文件的函数。一类称做标准文件函数也称缓冲型文件函数, 这是ANSI标准定义的函数; 另一类叫非标准文件函数, 也称非缓冲型文件函数。这类函数最早公用于UNIX操作系统, 但现在MS-DOS3.0 以上版本的操作系统也可以使用。下面分别进行介绍。

标准文件函数
标准文件函数主要包括文件的打开、关闭、读和写等函数。不象BASIC 、 FORTRAN语方有顺序文件和随机文件之分, 在打开时就应按不同的方式确定。 C语言并不区分这两种文件, 但提供了两组函数, 即顺序读写函数和随机读写函数。

一、文件的打开和关闭
任何一个文件在使用之前和使用之后, 必须要进行打开和关闭, 这是因为操作系统对于同时打开的文件数目是有限制的, DOS操作系统中,
可以在DEVICE .SYS中定义允许同时打开的文件数n(用files=n定义)。其中n 为可同时打开的文件数, 一般n<=20。因此在使用文件前应打开文件, 才可对其中的信息进行存取。用完之后需要关闭,
否则将会出现一些意想不到的错误。C提供了打开和关闭文件的函数。

1. fopen()函数
fopen函数用于打开文件, 其调用格式为:
FILE *fopen(char *filename, *type);
在介绍这个函数之;前, 先了解一下下面的知识。
(1) 流(stream)和文件(file)
流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流", 而将具体的实际设备叫做文件。流是一个逻辑设备, 具有相同的行为。因此, 用来进行磁盘文件写的函数也同样可以用来进行打印机的写入。在Turbo C2.0中有两种性质的流: 文字流( text stream)和二进制(binary stream)。对磁盘来说就是文本文件和二进制文件。本软件为了便于让读者易理解Turbo C2.0语言而没有对流和文件作特别区分。
(2) 文件指针FILE
实际上FILE是一个新的数据类型。它是Turbo C2.0的基本数据类型的集合, 称之为结构指针。有关结构的概念将在第四节中详细介绍, 这里只要将FILE理解为一个包括了文件管理有关信息的数据结构, 即在打开文件时必须先定义一个文件指针。
(3) 以后介绍的函数调用格式将直接写出形式参数的数据类型和函数返回值的数据类型。例如: 上面打开文件的函数, 返回一个文件指针, 其中形式参数有两个, 均为字符型变量(字符串数组或字符串指针)。本软件不再对函数的调用格式作详细说明。

现在再来看打开文件函数的用法。
fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分。如:
"B:TEST.DAT" "C:\\TC\\TEST.DAT"
如果将路径写成"C:\TC\TEST.DAT"是不正确的, 这一点要特别注意。
第二个形式参数表示打开文件的类型。关于文件类型的规定参见下表。
表 文件操作类型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 含义
────────────────────────────
"r" 打开文字文件只读
"w" 创建文字文件只写
"a" 增补, 如果文件不存在则创建一个
"r+" 打开一个文字文件读/写
"w+" 创建一个文字文件读/写
"a+" 打开或创建一个文件增补
"b" 二进制文件(可以和上面每一项合用)
"t" 文这文件(默认项)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
如果要打开一个CCDOS子目录中, 文件名为CLIB的二进制文件, 可写成:
fopen("c:\\ccdos\\clib", "rb");
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针 (NULL)。由此可判断文件打开是否成功。

2. fclose()函数
fclose()函数用来关闭一个由fopen()函数打开的文件 , 其调用格式为:
int fclose(FILE *stream);
该函数返回一个整型数。当文件关闭成功时, 返回0, 否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。

例10:
#iclude<stdio.h>
main()
{
FILE *fp; /*定义一个文件指针*/
int i;
fp=fopen("CLIB", "rb"); /*打开当前目录名为CLIB的文件只读*/
if(fp==NULL) /*判断文件是否打开成功*/
puts("File open error");/*提示打开不成功*/
i=fclose(fp); /*关闭打开的文件*/
if(i==0) /*判断文件是否关闭成功*/
printf("O,K"); /*提示关闭成功*/
else
puts("File close error");/*提示关闭不成功*/
}

二、有关文件操作的函数
本节所讲的文件读写函数均是指顺序读写, 即读写了一条信息后, 指针自动加1。下面分别介绍写操作函数和读操作函数。

1. 文件的顺序写函数
fprintf()、fputs()和fputc()函数
函数fprintf()、fputs()和fputc()均为文件的顺序写操作函数, 其调用格式如下:
int fprintf(FILE *stream, char *format, <variable-list>);
int fputs(char *string, FILE *steam);
int fputc(int ch, FILE *steam);
上述三个函数的返回值均为整型量。fprintf() 函数的返回值为实际写入文件中的字罕个数(字节数)。如果写错误, 则返回一个负数, fputs()函数返回0时表明将string指针所指的字符串写入文件中的操作成功, 返回非0时, 表明写操作失败。fputc()函数返回一个向文件所写字符的值, 此时写操作成功, 否则返回EOF(文件结束结束其值为-1, 在stdio.h中定义)表示写操作错误。
fprintf( ) 函数中格式化的规定与printf( ) 函数相同, 所不同的只是 fprintf()函数是向文件中写入。而printf()是向屏幕输出。
下面介绍一个例子, 运行后产后一个test.dat的文件。

例11:
#include<stdio.h>
main()
{
char *s="That's good news"); /*定义字符串指针并初始化*/
int i=617; /*定义整型变量并初始化*/
FILE *fp; /*定义文件指针*/
fp=fopne("test.dat", "w"); /*建立一个文字文件只写*/
fputs("Your score of TOEFLis", fp);/*向所建文件写入一串字符*/
fputc(':', fp); /*向所建文件写冒号:*/
fprintf(fp, "%d\n", i); /*向所建文件写一整型数*/
fprintf(fp, "%s", s); /*向所建文件写一字符串*/
fclose(fp); /*关闭文件*/
}
用DOS的TYPE命令显示TEST.DAT的内容如下所示:
屏幕显示
Your score of TOEFL is: 617
That's good news

2. 文件的顺序读操作函数
fscanf()、fgets()和fgetc()函数
函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数, 其调用格式如下:
int fscanf(FILE *stream, char *format, <address-list>);
char fgets(char *string, int n, FILE *steam);
int fgetc(FILE *steam);
fscanf()函数的用法与scanf()函数相似, 只是它是从文件中读到信息。 fscanf()函数的返回值为EOF(即-1), 表明读错误, 否则读数据成功。fgets()函数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的字符串中, 在读入之后自动向字符串未尾加一个空字符, 读成功返回string指针, 失败返回一个空指针。fgetc()函数返回文件当前位置的一个字符, 读错误时返回EOF。
下面程序读取例11产生的test.dat文件, 并将读出的结果显示在屏幕上。
例12
#include<stdio.h>
main()
{
char *s, m[20];
int i;
FILE *fp;
fp=fopen("test.dat", "r"); /*打开文字文件只读*/
fgets(s, 24, fp); /*从文件中读取23个字符*/
printf("%s", s); /*输出所读的字符串*/
fscanf(fp, "%d", &i); /*读取整型数*/
printf("%d", i); /*输出所读整型数*/
putchar(fgetc(fp)); /*读取一个字符同时输出*/
fgets(m, 17, fp); /*读取16个字符*/
puts(m); /*输出所读字符串*/
fclose(fp); /*关闭文件*/
getch(); /*等待任一键*/
}
运行后屏幕显示:
Your score of TOEFL is: 617
That's good news
如果将上例中fscanf(fp, "%d", &i)改为fscanf(fp, "%s", m),
再将其后的输出语句改为printf("%s", m), 则可得出同样的结果。由此可见Turbo C2. 0 中只要是读文字文件,
则不论是字符还是数字都将按其ASCII值处理。 另外还要说明的一点就是fscanf()函数读到空白符时, 便自动结束, 在使用时要特别注意。

4. feof()和rewind()函数
这两个函数的调用格式为:
int feof(FILE *stream);
int rewind(FILE *stream);
feof()函数检测文件位置指示器是否到达了文件结尾, 若是则返回一个非0 值, 否则返回0。这个函数对二进制文件操作特别有用, 因为二进制文件中, 文件结尾标志EOF也是一个合法的二进制数, 只简单的检查读入字符的值来判断文件是否结束是不行的。如果那样的话,可能会造成文件未结尾而被认为结尾, 所以就必须有feof()函数。
下面的这条语句是常用的判断文件是否结束的方法。
while(!feof(fp))
fgetc(fp);
while为循环语句, 将在下面介绍。
rewind()函数用于把文件位置指示器移到文件的起点处, 成功时返回0, 否则, 返回非0值。

非标准文件函数
这类函数最早用于UNIX操作系统, ANSI标准未定义, 但有时也经常用到, DOS 3.0以上版本支持这些函数。它们的头文件为io.h。
一、文件的打开和关闭
1. open()函数
open()函数的作用是打开文件, 其调用格式为:
int open(char *filename, int access);
该函数表示按access的要求打开名为filename的文件, 返回值为文件描述字, 其中access有两部分内容: 基本模式和修饰符, 两者用" "("或")方式连接。修饰符可以有多个, 但基本模式只能有一个。
open()函数打开成功, 返回值就是文件描述字的值(非负值), 否则返回-1。

2. close()函数
close()函数的作用是关闭由open()函数打开的文件, 其调用格式为:
int close(int handle);
该函数关闭文件描述字handle相连的文件。

分享到:
评论

相关推荐

    C语言文件输入与输出

    C语言输入输出函数 1.fopen&#40;&#41;函数 fopen函数用于打开文件,其调用格式为:FILE*fopen&#40;char*filename,*type&#41;; 在介绍这个函数之;前,先了解一下下面的知识。(1)流(stream)和文件(file) 流和文件在TurboC...

    C语言中的输入输出函数

    ### C语言中的输入输出函数详解 #### 一、错误报告:perror()函数 在C语言中,**perror()**函数提供了一种简洁而统一的方式来处理错误报告。当使用C标准库中的I/O函数(如`fopen`, `fclose`, `fprintf`等)时,...

    介绍c语言文件的输入输出.docx

    本章我们对C语言文件输入输出的基本概念、函数和应用进行了详细的介绍,包括文件的基本概念、文件的分类、文件的顺序读写、fgetc函数、fputc函数、feof函数等。这些知识点对于C语言程序员来说是非常重要的,它们可以...

    一图归纳C语言中文件的输入输出函数.pdf

    本文通过对C语言中文件输入输出函数进行归纳总结,旨在帮助读者深入理解文件操作的原理,以及各种函数的具体使用方法。 首先,输入和输出的概念在编程中是相对的。从内存的角度看,数据从内存到文件的传输被认为是...

    C语言函数库 C语言函数库和文件(完).doc

    - 按照功能相关性将函数分组到不同文件中,如将输入/输出函数、数据库操作函数等分开。 - 创建通用函数文件,包含那些被多个函数调用的通用功能。 - 主要的、高层次的函数(包括`main()`)可以单独放在一个文件中,...

    C语言文件处理总结 函数大全

    C语言文件处理总结 包含各种函数 fopen,fclose,fputc,fgetc,fscanf,fprintf,fread,fwrite,rewind,fseek,ftell,ferror,clearerr

    C语言趣味编程及函数表

    对于学习者来说,这是一个非常宝贵的参考资料,可以迅速查找并理解如何使用特定的C语言函数,比如输入输出函数中的printf和scanf,字符串处理函数中的strcpy和strcat,以及数学函数中的sqrt和pow等。 在C语言中,...

    C语言实验二——函数.

    常用的文件输入/输出函数包括fopen、fread、fwrite和fclose。 实验要求: 1. 编写一个函数来计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。 2. 编写一个测试函数来测试该函数的正确性。 3. 在给定...

    c语言输入和输出ppt课件.ppt

    字符输入输出函数是C语言中最基本的输入输出函数。putchar()函数是向屏幕输出一个字符,其调用格式为:putchar(ch);其中ch为一个字符变量、字符常量或整型常量。getchar()函数是从标准输入文件(通常是键盘,亦指...

    c语言函数大全 所有函数

    1. **基本输入输出函数**: - `printf()`:用于向标准输出设备(通常是屏幕)打印格式化的数据。 - `scanf()`:从标准输入设备(通常是键盘)读取用户输入的数据。 2. **内存管理函数**: - `malloc()`:动态...

    C语言函数名C语言函数名.doc

    输入输出函数是C语言中用来进行输入输出操作的函数,它们可以用来读取键盘输入、显示屏幕输出、读取文件输入、写入文件输出等。常见的输入输出函数有: * printf:格式化输出 * scanf:格式化输入 * fgets:读取...

    C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数

    8. **C语言文件操作**:C语言提供了标准I/O库来读写文件,学习者将学会如何打开、关闭文件,以及如何读取和写入数据。 9. **C语言指针**:指针是C语言的精髓,它们允许直接操作内存地址,提供高效的数据操作和复杂...

    C语言参考手册之函数库-非扫描

    1. 输入/输出函数:`printf` 和 `scanf` 是最常用的I/O函数,用于格式化输出和输入数据。 2. 字符和字符串处理:`strlen` 计算字符串长度,`strcpy` 复制字符串,`strcmp` 比较字符串。 3. 数学运算:`sqrt` 返回...

    C语言常用函数速查手册.pdf

    首先,C语言作为一种高效、灵活的编程语言,它提供了大量的内置函数,这些函数可以分成不同的类别,如标准输入输出函数、数学函数、字符串处理函数、内存管理函数、时间日期函数等。 1. 标准输入输出函数:这类函数...

    c语言输入和输出(共22张PPT).pptx

    C语言本身没有提供输入输出语句,C语言中的所有I/O操作都是通过函数调用来实现,而这些并非C语言一部分的输入输出函数均以目标级程序的方式提供,并存放在一个C标准函数库中。 3.1 概述 C语言中的所有I/O操作都是...

    C语言标准函数库速查手册.chm

    C语言的标准函数库,也称为C标准库(C Standard Library),是C语言的核心组成部分,它提供了一系列的预定义函数,方便程序员处理常见的任务,如输入/输出操作、内存管理、字符串处理、数学运算等。 本速查手册...

    C语言工程设计03输入输出.pptx

    本资源文件主要介绍了C语言工程设计中的输入输出技术,包括标准输出、标准输入、字符输入输出、字符串输入输出、文件输入输出等内容。下面我们将详细介绍这些知识点。 一、标准输出 标准输出是指计算机系统向外部...

    C语言函数全集,7个压缩文件,函数全包了。

    通过这7个压缩文件,你可以系统地学习和查阅C语言中的各种函数,从基本的输入输出函数到复杂的数学运算函数,再到实用的字符串处理函数,全面了解C语言函数的使用和应用。这些资源对于初学者巩固基础知识,以及熟练...

    c语言大全(C函数浏览,c函数速查,C语言编程宝典等)

    C语言的函数库是其强大之处,包括输入/输出操作、字符串处理、数学运算、内存管理等多种功能。这个文档应该详细列出了每个函数的用途、参数和返回值,是开发者快速查询函数用法的实用工具。 《c函数速查》.chm 文件...

Global site tag (gtag.js) - Google Analytics