IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 文件操作知识总结 -> 正文阅读

[C++知识库]C++ 文件操作知识总结

目录

  1. 文件基本概念
  2. 文件I/O
  3. 文件顺序读写与随机文件读写
  4. 文件的打开与关闭
  5. 文本文件处理
  6. get(), getline(), put()函数
  7. 其他操作

一、文件基本概念

?文件可以看作是一个连续的字符串集合,该字符串集合没有大小
?字符串是以流的形式存在,文件也可以看作是一个流的集合,称为流式文件
?文件可以看作将信息集合到一起存储的格式,通常存储在计算机的外部存储介质
?使用文件有点:
1)文件可以使一个程序对不同的输入数据进行加工处理,并产生相应的输出结果
2)使用文件可以方便用户,提高上机效率
3)使用文件可以不受内存大小限制

二、文件I/O

?C++标准库中,文件I/O操作有丰富的类,这些类都由一个抽象类作基类,然后这些抽象类派生出具体的实现类。
?C++中对文件进行操作分为如下步骤:
1 建立文件流对象
2 打开或建立文件
3 进行读写操作
4 关闭文件
?文件I/O操作的三个流类
1 fstream(输入输出文件流)
2 ifstream(输入文件流)
3 ofsream(输出文件流)
以上三个类都包含在fstream头文件中。程序对文件操作,必须包含该头文件。
ifstream对象如果重复使用,需注意使用前,先调用clear函数,否则会报错。

fstream案例

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
//在当前工程目录test06下,建立com.txt
void fstreamEx()
{
	char buffer[256];
	fstream out;
	out.open("com.txt", ios::in);
	cout << "com.txt的内容如下:"<< endl;
	while(!out.eof())//eof end of file  判断是否到文件结尾
	{
		//getline(char*, int, char)表示该行字符达到256个或遇到换行符就结束
		out.getline(buffer, 256, '\n');
		cout << buffer << endl;
	}
	out.close();
	//cin.get()是用来读取回车键的,如果没这一行
	//输出的结果一闪就消失
	//cin.get();
}
void main()
{
	fstreamEx();
	system("pause");
}

ifstream案例

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
//测试ifstream
int CountLines(char *filename)
{
	ifstream readFile;
	int n = 0;
	char line[512];
	string temp;
	//ios::in表示以只读方式读取文件
	readFile.open(filename, ios::in);
	//文件打开失败,返回true
	if(readFile.fail())
	{
		return 0;
	}
	else//文件存在
	{
		while(getline(readFile, temp))
		{
			n++;
		}
		return n;
	}
	readFile.close();
}

void ifstreamEx()
{
	cout << "com.txt的行数为: " << CountLines("com.txt") << endl;
}

void main()
{
	ifstreamEx();
	system("pause");
}

ofstream案例

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

void ofstreamEx()
{
	ofstream in;
	//ios::trunc表示在打开文件前将文件清空
	//由于写入,文件不存在则创建
	in.open("com.txt", ios::trunc);
	int i;
	char a = 'a';
	for(i = 1; i <= 26; i++)
	{
		if(i < 10)
		{
			in << "0" << i << "\t" << a << "\n";
			a++;
		}
		else
		{
			in << i << "\t" << a << "\n";
			a++;
		}
	}
	in.close();
}

void main()
{
	ofstreamEx();
	system("pause");
}

三、文件顺序读写与随机文件读写

顺序读写:
在C++文件中,每条记录是一个接着一个存储的,如果想查找一条记录,则必须从文件的开头逐一读取文件的记录,直到找到该条记录的位置。
随机文件读写:
随机文件每个记录都有一个记录号,在读写数据时,只要指定记录号,就可以对数据进行读写。

随机文件读写案例

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int CountLines(char *filename)
{
	ifstream readFile;
	int n = 0;
	string tmp;

	readFile.open(filename, ios::in);
	if(readFile.fail())
	{
		return 0;
	}
	else
	{
		while(getline(readFile, tmp))
		{
			n++;
		}
		return n;
	}

	readFile.close();
}

string ReadLine(char *filename, int line)
{
	int lines, i = 0;
	string temp;
	fstream file;
	file.open(filename, ios::in);
	lines = CountLines(filename);
	if(line <= 0)
	{
		return "error 1, 行数错误,不能为0或负数";
	}
	if(file.fail())
	{
		return "error 2, 文件不存在.";
	}
	if(line > lines)
	{
		return "error 3, 行数超出文件长度";
	}
	while(getline(file, temp) && i < line - 1)
	{
		i++;
	}
	file.close();
	return temp;
}

void test01()
{
	int l;
	char filename[256];
	cout << "请输入文件名: " << endl;
	cin >> filename;
	cout << "请输入要读取的行数: " << endl;
	cin >> l;
	cout << ReadLine(filename, l) << endl;
}

void main()
{
	test01();
	system("pause");
}

四、文件的打开与关闭

C++中,要进行文件的输入输出,必须创建一个流,把这个流与文件相关联,才能对文件进行操作,完成后要关闭文件。

文件的打开

1)fstream类中的open()成员函数
在fstream类中的open成员函数,用来打开文件。函数原型为:
void open(const char* filename, int mode, int access);
参数含义如下:
filename:要打开的文件名
mode:要打开文件的方式
access:打开文件的属性
打开文件的方式在类ios(是所有流式IO类的基类)中定义,常用值如下:
ios::app:以追加方式打开文件
ios::ate: 文件打开后定位到文件尾,ios:app就包含此属性
ios::binary:以二进制方式打开文件,默认的方式是文本方式
ios::in:文件以输入方式打开
ios::out:文件已输出方式打开
ios::nocreate:不建立文件,所以文件不存在时,打开失败
ios::noreplace:不覆盖文件,所以文件存在时打开失败
ios::trunc:如果文件存在,把文件长度设为0.
可以用“或”把以上属性连接起来,如ios::out | ios::binary
打开文件的属性取值:
0 普通文件,打开访问
1 只读文件
2 隐含文件
3 系统文件
默认打开方式:
如果没有指定打开方式参数,编译器会使用默认值
fstream 无默认值
ifstream std::ios::in
ofstream std::ios::out | std::ios::trunk

文件的关闭

1 当文件读写操作完成后,必须将文件关闭,以使文件重新变为可访问。
2 关闭文件需要调用成员函数close(),它负责将缓存中的数据排放出来并关闭文件。
3 关闭格式:void close();这个函数一旦被调用,原先的流对象就可以被用来打开其他文件,这个文件就可以重新被其他进程访问。
4 为防止流对象被销毁时还联系这打开的文件,析构函数将会自动调用关闭函数close.

五、文本文件处理

文本文件是以ASCII处理文件的,可以用字符处理软件来处理。文本文件的读写很简单,用插入运算符<<向文件输出,用析取运算符>>从文件输入

将变量写入文件

void writeFile()
{
	ofstream outfile;
	outfile.open("a.txt");//
	outfile << "锄禾日当午,汗滴禾下土";
	outfile.close();
}

将变量写入文件尾部

void writeAppendFile()
{
	ofstream outfile;
	outfile.open("a.txt", ios::out | ios::app);
	outfile << "谁知盘中餐,粒粒皆辛苦";
	outfile.close();	
}

从文本文件中读入变量

void readFile()
{
	ifstream infile;
	char value;
	infile.open("com.txt");
	if(infile.is_open())
	{
         //infile >> value
		while(infile.get(value))
		{
			cout << value;
		}
	}
	cout << endl;
	infile.close();
}

六、get(), getline(), put()函数

get()

get函数是ifstream类的成员函数,作用是读取该类的对象的一个字符并且将之作为调用函数的返回值。get函数会自动向后读取下一个字符,直到遇到文件结束符,则返回EOF作为文件的结束。

void testGet()
{
	ifstream infile;
	char value;
	infile.open("a.txt");
	if(infile.is_open())
	{
		while(infile.get(value))
		{
			cout << value;
		}
	}
	cout << endl;
	infile.close();
}

getline(str, n, ‘\n’)

从文件读取字符存入字符串str中,直到读取n-1个字符或遇到”\n”时结束

void testGetLine()
{
	char buffer[256];
	ifstream infile("com.txt");
	if(!infile.is_open())
	{
		cout << "error opening file";
		exit(1);
	}

	while(!infile.eof())
	{
		infile.getline(buffer, 100);
		cout << buffer << endl;
	}
}

getline(str, n, ‘\n’)

put函数用于输出流ofstream, 输出单个字符

void testPut()
{
	ofstream out("a.txt");//创建一个文件
	out.put('A');
	out.put('B');
	out.close();
}

七、其他操作

get(c)从文件中读取一个字符,如果返回-1,则表示读取到文件末尾。
eof() 如果到文件末尾,返回true,否则返回false。
remove(const char* name),删除文件,成功返回true,否则返回false
peek():查找下一个字符,但不从文件中取出

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:27:16  更:2021-07-29 11:27:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/29 6:04:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码