C++文件操作
C++也有处理文件的能力,其功能实现依赖文件流。文件流是C++中用来处理文件输入输出的一种流类。文件流可以用于从文件中读取数据或将数据写入到文件中。C++中的文件流类包括ifstream(用于从文件中读取数据)、ofstream(用于向文件中写入数据)和fstream(用于同时读取和写入文件)。这些文件流类提供了一组成员函数,可以用来打开、关闭、读取和写入文件。使用文件流可以方便地进行文件操作,如读取文件内容、写入数据到文件中等。这里我们主要学习文件的处理方法,想要深度了解文件流的小伙伴可以在学完本节之后再补充相关知识。
1.文本的写入及读取
字符串文件是C++经常处理的一种文件类型,其依赖为i/ostream和fstream类。
文本文件写入
我们看一个向文件中写入内容的例子:
#include<stdio.h>
#include<iostream>
#include<fstream>
#include <string>
using std::string;
using namespace std;
int main()
{
string filename="test.txt"; // 文件名
ofstream mytest; // 使用ofstream创建文件输出流对象,名字自拟
mytest.open(filename); // 打开文件
// 向文件中写入数据
mytest<<"这是一个测试\n"<<"我们尝试连续输入内容\n";
mytest<<"继续测试";
// 关闭文件
mytest.close();
}
在这段代码中,filename定义了一个文件名,我们尝试使用文件流打开文件,当当前路径下存在文件时,这段代码会截断文件,即打开文件后删除文件内容,重新进行写入操作,当文件不存在时,会在当前路径下创建文件并写入内容。运行这段代码会在.cpp文件路径下产生一个.txt文件:
虽然操作成功了,但是这样的做法存在不足和风险,比如我们在打开或创建文件时应当给出文件的确切位置,不应该只让它生成在.cpp文件的路径下;在使用文件之前应当判断文件是否成功打开。
为了解决以上不足,我们先详细了解一下ofstream输出流。ofstream创建了文件输出流对象,而open函数可以带有两个参数,即文件及路径和打开方式。文件的绝对路径有以下写法:
R"(C:\data…\test.txt)" (C++11标准)
“C:\data\…\text.txt”
“C:/data/…/text.txt”
其次,文件的打开方式可以这样规定:
ios::out 截断文件内容打开文件,为参数默认值
ios::truck 截断文件内容,类似于ios::out
ios::app 在文件后添加内容
我们再来测试一下:
int main()
{
ofstream mytest;
mytest.open("E:\\c++\\class3start11\\test.txt",ios::app);
// 使用ios::app 在文件后添加内容
// 向文件中写入数据
mytest<<"这是一个测试\n"<<"我们尝试连续输入内容\n";
// 关闭文件
mytest.close();
}
再打开文件其内容就变成了: