C\C++ | FILE文件基本操作函数

C\C++FILE文件操作函数

首先,我们先来了解一下打开文件时要用到的参数:

标志 含义
r,rb 以只读的方式打开文件
w,wb 以只写的方式打开文件,若不存在,则新建文件,否则文件被截断(覆盖)
a,ab 以追加的方式打开文件,若不存在,则新建该文件
r+,r+b,rb+ 以读写方式打开文件
w+,w+b,wb+ 以读写方式打开文件,若不存在,则新建文件,否则文件被截断(覆盖)
a+,a+b,ab+ 以读和追加方式打开文件,若不存在,则新建文件

文件指针的定义

定义文件指针时,需要用到FILE:

FILE *fp;

fopen()

fopen函数和fclose函数一般都结合使用,也就是说当打开一个文件后,对该文件操作完时一定要用fclose函数关闭该文件,有始有终。
假设打开一个文本文件test.txt

	FILE *fp;
	//以只读方式打开
	fp=fopen("test.txt","r");
	//以只写方式打开
	fp=fopen("test.txt","w");
	//以追加的方式打开
	fp=fopen("test.txt","a");
	
	//以此类推,只修改参数就好了
	……

fclose()

	fclose(fp);	//关闭文件

fgetc()与fputc()

fgetc()
int fgetc(FILE *stream);

调用形式:fgetc(fp)
功能:从fp指向的文件中读入一个字符,读取成功则带回所读字符,否则就返回EOF(-1).

fputc()
int fputc(int c, FILE *stream);

调用形式:fputc(ch,fp)
功能:把字符ch写到文件指针变量fp所指向的文件中,若失败则返回EOF(-1).

现在来看一个例子,将一个磁盘文件中的信息复制到另一个磁盘文件中。需复制的磁盘文件为test.dat,假设其内容为“Hello World!”另一个磁盘文件为file.dat.(该例子假设两个文件存在,且其中一个有内容)

#include <cstdio>
#include <iostream>
using namespace std;

int main()
{
	FILE *in,*out;
	if((in=fopen("test.dat","r"))==NULL){
		printf("Cannot open infile\n");
		exit(0);
	}
	if((out=fopen("file.dat","w"))==NULL){
		printf("Cannot open outfile\n");
		exit(0);
	}
	while(!feof(in))
		fputc(fgetc(in),out);
	fclose(in);
	fclose(out);
	return 0;
}

fprintf()与fscanf()

这两个函数的一般格式如下:
fprintf(文件指针,格式字符串,输出列表);
fscanf(文件指针,格式字符串,输入列表);
fprintf()
int fprintf( FILE *stream, const char *format, … );

	FILE *fp;
	char str[10]="abcdefg";
	fp=fopen("test.txt","w");
	//表示将str以%s(字符串)的型式写入到文本文件test.txt中
	fprintf(fp,"%s",str);

fscanf()
int fscanf (FILE *stream, const char *format, …);

	FILE *fp;
	char str[10];
	fp=fopen("test.txt","r");
	//表示将文件test中的内容以字符串的形式写入到str中
	fscanf(fp,"%s",str);

需要注意的是,如果用fscanf读取文本中的内容,遇到空格符、换行符等时会截止,比如说str=abc abcd,那么只有abc被读入,因此如果字符串中有空格时,最好用fgets函数。

fgets()与fputs()

fgets()
char *fgets(char *s, int n, FILE *stream);
调用形式:fgets(str, n, fp);
功能:从fp指向的文件中读入一个长度为(n-1)的字符串,然后再最后面加上一个’\0’,存放到字符数组str中。若在读入的过程中遇到’\n’或者是文件结束符EOF,则结束输入。

fputs()
int fputs(const char *s, FILE *stream);
调用形式:fputs(str, fp);
功能:把字符串str写到文件指针变量fp所指向的文件中

下面来看一个例题,该例题同上例题,但要求要用fgets和fputs函数。

#include <cstdio>
#include <iostream>
using namespace std;

int main()
{
	FILE *in,*out;
	char str[1000];
	if((in=fopen("test.txt","r"))==NULL){
		printf("Cannot open infile\n");
		exit(0);
	}
	if((out=fopen("file.txt","w"))==NULL){
		printf("Cannot open outfile\n");
		exit(0);
	}
	fgets(str,1000,in);
	fputs(str,out);
	fclose(in);
	fclose(out);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_44888152/article/details/106837315