目录
一 文件读写类
从文件读取流和向文件写入流所使用的标准库 是fstream,它定义了三个新的数据类型:
数据类型 | 描述 |
ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
ifstream | 该数据类型表示输入文件流,用于从文件读取信息。 |
fstream | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 |
二 文件的打开模式
模式标志 | 描述 |
ios::app | 追加模式。所有写入都追加到文件末尾。 |
ios::ate | 文件打开后定位到文件末尾。 |
ios::in | 打开文件用于读取。 |
ios::out | 打开文件用于写入。 |
ios::trunc | 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。 |
三 代码实例
//
// Created by 11010 on 2023/4/9.
//
#ifndef CPP_14_FILE_FILEREADWRITE_H
#define CPP_14_FILE_FILEREADWRITE_H
#include <fstream> //操作文件的头文件
using namespace std;
//文件的读取与写入
class fileReadWrite {
public:
string filePath; //文件路径
enum model {
read, write, readWrite
} model1; //读写模式枚举
bool display = false; //是否把数据显示到屏幕
ofstream *writeStream; //写文件对象
ifstream *readStream; //读文件对象
fstream *ReadWriteStream; //读写文件
/*fileReadWrite();
fileReadWrite(string path);*/
fileReadWrite(string path,ofstream *writeStream);
fileReadWrite(string path,ifstream *readStream);
fileReadWrite(string path,fstream *ReadWriteStream);
void openFile(model model, bool display); //打开文件,参数的含义是选择文件的操作模式、文件内容输出目的地
void close(); //关闭文件
};
#endif //CPP_14_FILE_FILEREADWRITE_H
//
// Created by 11010 on 2023/4/9.
//
#include "fileReadWrite.h"
#include "iostream"
#include "string"
fileReadWrite::fileReadWrite(string path, ofstream *w) :
filePath(path), writeStream(w) {
if (path == "") cout << "文件路径为空!";
}
fileReadWrite::fileReadWrite(string path, ifstream *r) :
filePath(path), readStream(r) {
if (path == "") cout << "文件路径为空!";
}
void fileReadWrite::openFile(fileReadWrite::model model, bool display) {
char c[100]; //保存控制台输入,最大字数不超过100个
//路径为空,给出提示结束函数运行
if (filePath == "") {
cout << "文件路径为空!" << endl;
return;
}
switch (model) {
//如果是写文件
case write:
if (writeStream == nullptr) {
cout << "写入对象为空,没有被初始化!" << endl;
return;
}
writeStream->open(filePath); //所有文件读追加到末尾
//从控制台接收数据,敲击回车键结束输入
cout << "请输入要保存到文中的名字,不超过100个字符,按下回车键结束输入!" << endl;
cin.getline(c, 100); //接收输入
//把输入的字符写入到文件中
writeStream->write(c, 100);
//判断是显示到屏幕还是写入到文件
if (display) {
cout << "你输入的数据为:" << endl;
cout << c << endl;
}
break;
//如果是读文件
case read:
if (readStream == nullptr) {
cout << "读取对象为空,没有被初始化!" << endl;
return;
}
readStream->open(filePath); //读模式打开
//把输入的字符写入到文件中
readStream->read(c, 100); //最大读取100个字符,并存储在char数组中
cout << "读取的文件完毕!:" << endl;
//判断是显示到屏幕还是写入到文件
if (display) {
cout << "读取的文件内容如下:" << endl;
cout << c << endl;
}
break;
//如果是读写文件
case readWrite:
if (ReadWriteStream == nullptr) {
cout << "读写对象为空,没有被初始化!" << endl;
return;
}
int flag;
cout << "请输入文件的操作模式,输入0代表写,输入1代表读" << endl;
cin >> flag;
if (flag == 0) {
//写入文件
ReadWriteStream ->open(filePath,ios::app);
//从控制台接收数据,敲击回车键结束输入
cout << "请输入要保存到文中的名字,不超过100个字符,按下回车键结束输入!" << endl;
cin.getline(c, 100); //接收输入
//把输入的字符写入到文件中
ReadWriteStream->write(c, 100);
cout << "写入文件完成,你写入的内容是:" << c << endl;
} else if (flag == 1) {
//开始读取
ReadWriteStream->open(filePath,ios::in); //读模式打开
//把输入的字符写入到文件中
ReadWriteStream->read(c, 100); //最大读取100个字符,并存储在char数组中
cout << "读取的文件完毕,内容为:" << c << endl;
} else {
cout << "你输入有误,程序结束!" << endl;
}
break;
}
}
//关闭文件对象的方法
void fileReadWrite::close() {
//只要读写对象不为空,则调用close方法释放对象
if (writeStream != nullptr) writeStream->close();
if (readStream != nullptr) readStream->close();
if (ReadWriteStream != nullptr) ReadWriteStream->close();
}
fileReadWrite::fileReadWrite(string path, fstream *w) : filePath(path), ReadWriteStream(w) {
}
#include <iostream>
#include <vector>
#include "fileReadWrite.h"
using namespace std;
int main() {
//文件路径: 在本项目路径下新建一个文本文件叫test.txt
string filePath = "..\\test.txt"; //注意文件路径的写法,因为当前的程序编译路径不一致,所有需要用两个点回退到父级目录才能找到
//初始化读写文件对象
ifstream *in=new ifstream ;
ofstream *on=new ofstream ;
fstream *io=new fstream ;
//初始化读文件封装类对象
/*fileReadWrite *frw=new fileReadWrite(filePath,in);
frw->openFile(fileReadWrite::read, true);
frw->close();*/
//初始化写文件封装类对象
/* fileReadWrite *fwr2=new fileReadWrite(filePath,on);
fwr2->openFile(fileReadWrite::write, true);
fwr2->close();*/
//初始化读写文件封装类对象
fileReadWrite *fwr3=new fileReadWrite(filePath,io);
fwr3->openFile(fileReadWrite::readWrite, true);
fwr3->close();
return 0;
}
代码clone地址: git@gitcode.net:XiaoWang_csdn/cpp_14_file.git