C++入门教程(十三、文件)

35 篇文章 9 订阅

前面教程汇总

第一讲

C++入门教程(一、初步了解)

第二讲

C++入门教程(二、基本数据类型)

第三讲

C++入门教程(三、数组、注释与函数)

第四讲

C++入门教程(四、运算符与表达式)

第五讲

C++入门教程(五、数组与字符串)

第六讲

C++入门教程(六、指针)

第七讲

C++入门教程(七、结构体)

第八讲

C++入门教程(八、枚举类型)

第九讲

C++入门教程(九、语句与控制流)

第十讲

C++入门教程(十、联合体)

第十一讲

C++入门教程(十一、宏)

第十二讲

C++入门教程(十二、内联函数)

文件

前言

文件是当今计算机系统不可或缺的部分。文件用于存储程序,文档,数据,书信,表格,图形,照片,等其它种类的信息,作为程序员,必须会编写创建文件和从文件中读写数据。

什么是文件?

文件通常是指在磁盘或固态是的一段已经命名的缓冲区,例如我们经常使用的 stdio.hiostream 就是一个文件,C语言将文件看成一段连续的字节,每个字节都可被单独读输,C提供了两种模式:文本模式和二进制模式。

如何打开文件和关闭文件

打开文件

在C语言和C++中我们一般利用 fopen 函数来打开文件,该函数声明在 <cstdio>(C语言为 <stdio.h> )库中。
调用该函数的一般形式:

FILE * fp;
fp = fopen(char *str1, "str2");

其中 str1 指向一个字符串,该字符串为该文件的文件名(即路径),第二个参数为C语言规定的模式字符串。
详情如下:
fopen

这里请注意,如果使用 w 模式打开一个现有文件,该文件的内容会被删除。
程序成功打开文件后,fopen 函数返回文件指针,其他 I/O 函数可以使用这个指针指定该文件,即上述代码中的fp,FILE是c语言的一种结构体,它的定义在<cstdio>(C语言为 <stdio.h> )库中。其中包含了缓冲区信息等,这里不多赘述。
若是我们打开文件失败,这里 fopen() 函数会返回一个空指针。

关闭文件

我们在对文件进行完操作之后,要关闭文件,防止文件内容被破坏,在c语言中我们一般用 fclose() 函数关闭文件,形式如下:

fclose(fp);

其中 fp 为文件指针,必要时会刷新缓冲区,当磁盘已满,移动硬盘被拔出或者出现 I/O 错误时文件会关闭失败,所以对于比较正式的程序我们应该检查文件是否关闭,当文件成功关闭时 fclose 函数返回0,否则返回 EOF(这里 eof 为文件结尾)。
判断代码如下:

if (fclose(fp) != 0) {
	printf("Error in closing file %s\n", str1);
}

文件的读写操作

输入输出字符

在C语言中我们利用 getc()putc() 函数进行文件里字符的输入和输出,语法如下所示:

ch = getc(fp);
putc(ch, fp);

getc 函数是读取文件中的一个字符赋给 ch
putc 函数是将 ch 写入文件中。

输入输出字符串

在文件中我们要进行字符串的输入和输出可以利用 fgets 函数和 fputs 函数,语法如下所示:

fgets(buf, stlen, fp);

fgets 函数的第一个参数和 gets 函数相同表示存储输入的地址(如上述代码中的 buf 是一个 char 型数组的名称),第二个参数是一个整数,表示带输入字符串的大小,最后一个参数为文件指针。
fgets 函数读取输入直到第一个换行符的后面,或者读到文件的末尾—— EOF ,或者读取到 strlen - 1 个字符,然后 fgets 函数在末尾添加一个空字符使之成为一个字符串,故我们读取的字符串长度为字符数加上一个空字符。 注意,如果 fgets 函数在读到字符上限之前已经读完一行,它为将换行符放到空字符前面。fgets 在遇见 eof 即文件结尾时会返回 null

fputs(buf, fp)

fputs 函数的两个参数实际意义与 fgets 相同,它的作用是将字符串写入指定的文件中,其中由于fgets 函数会保留换行符,所以 fputs 函数不会像 puts 函数一样自动添加换行符。

格式化输入与输出

文件的格式化输入与输出函数为 fscanffprintf 函数其工作方式与 scanfprintf 类似。
语法如下所示:

fprintf(fp, "%s", str1);
fscanf(fp, "%d", &a);

文件读写移动操作

在我们对文件进行读取时,经常需要改变读取的位置,在C语言中有两个函数可以便于我们进行这种操作。

ftell 函数

用来取文件当前位置。其一般形式为:

long n;
n = ftell(fp);

它的返回值时一个长整型,表示当前的读写位置(从文件开始处到现在的字节数),调用正确返回当前读写位置,错误返回 -1L

fseek 函数

fseek 函数用来改变文件指针的当前位置。其一般形式为:

fseek(fp,offset,from);
offset

位移量,类型为 long 型,表示以 from 为起点移动的量相对值(字节数)。

from

移动的起始位置。
from 是一种模式,如下所示:
pic

文件的应用——倒序打印文件中的字符

例如我们在文本中输入 hello world ,输出结果为:dlrow olleh

#include <cstdio>
#include <cstdlib> 
#define SLEN 81 

int main()
{
	char file[SLEN];
	char ch;
	FILE *fp;
	long count, last;
	puts ("Enter the name of the file to be processed:");
	scanf("%80s",file);
	if ((fp = fopen(file, "r")) == NULL) {		//以只读的方式打开文件 
		printf("不存在文件%s\n", file);
		exit(1);
	}
	fseek(fp, 0L, SEEK_END);					//定位到文件末尾
	last = ftell(fp);							//获得从文件开始到现在的字节数
	for (count = 1L; count <= last; count++) {
		fseek(fp, -count, SEEK_END);			//回退
		ch = getc(fp);
		if (ch != 'EOF' && ch != 'r') {
			putchar(ch);
		} 
	}
	printf("\n");
	fclose(fp);
	return 0; 
}

至此,C++入门教程就已经全部结束了。如果想进一步学习,可以关注我,留意我接下来的文章合集“算法入门教程”。注意,算法入门教程是程序算法,可用于各种语言,但是我将在教程里面使用C语言作为程序样例。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoungGeeker

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值