文章目录
本次我们准备学习C语言中的文件操作。内存里的数据要持久保存,那么就必然会涉及到文件的读写操作。这也是C语言学习中比较重要的一部分内容,希望大家理解并掌握。
一、文件打开与关闭
(一)概述
文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。在C语言中,文件操作都是由库函数来完成的。
(二)文件打开函数 - fopen()
1、调用格式
文件指针名 = fopen(文件名, 使用文件方式);
2、参数与返回值说明
- “文件指针名”必须是被说明为FILE 类型的指针变量
- “文件名”是被打开文件的文件名
- “使用文件方式”是指文件的类型和操作要求
- “文件名”是字符串常量或字符串数组
FILE *fp;
fp = fopen("test.txt", "r");
- 其意义是在当前目录下打开文件test.txt,只允许进行“读”操作,并使fp指向该文件。
FILE *fp;
fp = fopen("c:\\test.jpg", "rb")
- 打开C盘根目录下文件test.jpg,只允许按二进制方式进行读操作。两个反斜线“\ ”中的第一个表示转义字符,第二个表示根目录。
3、文件使用方式
- “rt”只读打开一个文本文件,只允许读数据
- “wt”只写打开或建立一个文本文件,只允许写数据
- “at”追加打开一个文本文件,并在文件末尾写数据
- “rb”只读打开一个二进制文件,只允许读数据
- “wb”只写打开或建立一个二进制文件,只允许写数据
- “ab”追加打开一个二进制文件,并在文件末尾写数据
- “rt+”读写打开一个文本文件,允许读和写
- “wt+”读写打开或建立一个文本文件,允许读写
- “at+”读写打开一个文本文件,允许读,或在文件末追加数据
- “rb+”读写打开一个二进制文件,允许读和写
- “wb+”读写打开或建立一个二进制文件,允许读和写
- “ab+”读写打开一个二进制文件,允许读,或在文件末追加数据
- 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:
if ((fp = fopen("c:\\test.jpg", "rb") == NULL) {
printf("error on open c:\\test.jpg file!");
getch();
exit(1);
}
- 如果返回指针为空,表示不能打开C盘根目录下的test.jpg文件,则给出提示信息“error on open c:\test.jpg!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。该行作用是等待,只有当用户从键盘敲任一字符才继续执行后续语句。exit函数返回非零值表示有错误发生。
(二)文件关闭函数 - fclose()
1、调用格式
fclose(文件指针名);
2、参数说明
“文件指针名”必须是被说明为FILE 类型的指针变量。
二、文件读写函数
- 字符读写函数 :fgetc()和fputc()
- 字符串读写函数:fgets()和fputs()
- 数据块读写函数:fread()和fwrite()
- 格式化读写函数:fscanf()和fprintf()
三、案例演示
1、编写程序 - 演示文件读写.c
/*
功能:演示文件读写
作者:华卫
日期:2013年12月3日
*/
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *fp;
char c;
//1. 写文件
// fopen("文件名","打开方式"); r--read, w--write, a--append
fp = fopen("c:/love.txt", "a"); //以追加方式打开文件
if(fp == NULL)
{
printf("文件无法打开!");
exit(0);
}
// fgetc()--从文件里读取一个字符, fputc()--往文件里写入一个字符
printf("输入字符串,以#结束:");
c = getchar(); //从键盘上输入一个字符
while (c != '#')
{
fputc(c, fp); //将字符变量c的内容写入fp指向的文件"c:\love.txt"
c = getchar(); //继续从键盘上输入一个字符
}
fputc('\n', fp); //每次输入完之后加一个换行符
fclose(fp); //关闭文件
/
//2. 读文件
fp = fopen("c:/love.txt", "r");
if(fp == NULL)
{
printf("文件无法打开!");
exit(0);
}
while(!feof(fp))
{
c = fgetc(fp); //从文件里读取一个字符
putchar(c); //把这个字符显示在屏幕上
}
fclose(fp); //关闭文件
}
2、运行程序,查看结果
- 第一次运行,查看结果
- 第二次运行,查看结果
- 说明:因为写文件采用的是追加方式,所以文件c:\love.txt里最后会有两次次输入的内容。