...
 
Commits (2)
    https://gitcode.net/XiaoWang_csdn/cpp_14_file/-/commit/0524c1e5dc55d240c99f28cfa4886183a9ea79fb 封装文件操作类 2023-04-09T16:59:21+08:00 wsb 1234@qq.com https://gitcode.net/XiaoWang_csdn/cpp_14_file/-/commit/2705599deb039fe348c86cd26c175371c795a3f9 封装文件操作类 2023-04-09T17:44:42+08:00 wsb 1234@qq.com
......@@ -3,109 +3,100 @@
//
#include "fileReadWrite.h"
#include "io.h"
#include "iostream"
#include "string"
//空构造方法
fileReadWrite::fileReadWrite() {
this->filePath = "";
cout << "路径为空,请设置文件路径" << endl;
}
fileReadWrite::fileReadWrite(string path) : filePath(path) {
if (path.length() == 0) cout << "文件路径为空!";
}
fileReadWrite::fileReadWrite(string path, ofstream *writeStream) :
filePath(path), writeStream(writeStream) {
if (path.length() == 0) cout << "文件路径为空!";
fileReadWrite::fileReadWrite(string path, ofstream *w) :
filePath(path), writeStream(w) {
if (path == "") cout << "文件路径为空!";
}
fileReadWrite::fileReadWrite(string path, ofstream *writeStream, ifstream *readStream) :
filePath(path), writeStream(writeStream), readStream(readStream) {
if (path.length() == 0) 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个
char c[100]; //保存控制台输入,最大字数不超过100个
//路径为空,给出提示结束函数运行
if (filePath.empty()) {
if (filePath == "") {
cout << "文件路径为空!" << endl;
return;
}
if (writeStream == nullptr){
cout << "写入对象为空,没有被初始化!" << endl;
return;
}
if (readStream == nullptr){
cout << "读取对象为空,没有被初始化!" << endl;
return;
}
if (ReadWriteStream == nullptr){
cout << "读写对象为空,没有被初始化!" << endl;
return;
}
switch (model) {
//如果是写文件
case write:
writeStream->open(filePath, ios::app); //所有文件读追加到末尾
if (writeStream == nullptr) {
cout << "写入对象为空,没有被初始化!" << endl;
return;
}
writeStream->open(filePath); //所有文件读追加到末尾
//从控制台接收数据,敲击回车键结束输入
cout<<"请输入要保存到文中的名字,不超过100个字符,按下回车键结束输入!"<<endl;
cin.getline(c,100); //接收输入
cout << "请输入要保存到文中的名字,不超过100个字符,按下回车键结束输入!" << endl;
cin.getline(c, 100); //接收输入
//把输入的字符写入到文件中
writeStream->write(c,100);
writeStream->write(c, 100);
//判断是显示到屏幕还是写入到文件
if (display) {
cout<<"你输入的数据为:"<<endl;
cout<<c<<endl;
cout << "你输入的数据为:" << endl;
cout << c << endl;
}
break;
//如果是读文件
case read:
writeStream->open(filePath, ios::in); //读模式打开
if (readStream == nullptr) {
cout << "读取对象为空,没有被初始化!" << endl;
return;
}
readStream->open(filePath); //读模式打开
//把输入的字符写入到文件中
readStream->read(c,100); //最大读取100个字符,并存储在char数组中
cout<<"读取的文件完毕!:"<<endl;
readStream->read(c, 100); //最大读取100个字符,并存储在char数组中
cout << "读取的文件完毕!:" << endl;
//判断是显示到屏幕还是写入到文件
if (display) {
cout<<"读取的文件内容如下:"<<endl;
cout<<c<<endl;
cout << "读取的文件内容如下:" << endl;
cout << c << endl;
}
break;
//如果是读写文件
case readWrite:
if (ReadWriteStream == nullptr) {
cout << "读写对象为空,没有被初始化!" << endl;
return;
}
int flag;
cout<<"请输入文件的操作模式,输入0代表写,输入1代表读"<<endl;
cin>>flag;
cout << "请输入文件的操作模式,输入0代表写,输入1代表读" << endl;
cin >> flag;
if (flag==0){
if (flag == 0) {
//写入文件
ReadWriteStream->open(filePath,ios::app);
ReadWriteStream ->open(filePath,ios::app);
//从控制台接收数据,敲击回车键结束输入
cout<<"请输入要保存到文中的名字,不超过100个字符,按下回车键结束输入!"<<endl;
cin.getline(c,100); //接收输入
cout << "请输入要保存到文中的名字,不超过100个字符,按下回车键结束输入!" << endl;
cin.getline(c, 100); //接收输入
//把输入的字符写入到文件中
ReadWriteStream->write(c,100);
cout<<"写入文件完成,你写入的内容是:"<<c<<endl;
ReadWriteStream->write(c, 100);
cout << "写入文件完成,你写入的内容是:" << c << endl;
}
else if (flag==1){
} else if (flag == 1) {
//开始读取
ReadWriteStream->open(filePath, ios::in); //读模式打开
ReadWriteStream->open(filePath,ios::in); //读模式打开
//把输入的字符写入到文件中
ReadWriteStream->read(c,100); //最大读取100个字符,并存储在char数组中
cout<<"读取的文件完毕,内容为:"<<c<<endl;
} else{
cout<<"你输入有误,程序结束!"<<endl;
ReadWriteStream->read(c, 100); //最大读取100个字符,并存储在char数组中
cout << "读取的文件完毕,内容为:" << c << endl;
} else {
cout << "你输入有误,程序结束!" << endl;
}
break;
......@@ -118,10 +109,9 @@ void fileReadWrite::close() {
//只要读写对象不为空,则调用close方法释放对象
if (writeStream != nullptr) writeStream->close();
if (readStream != nullptr) readStream->close();
if (ReadWriteStream != nullptr) ReadWriteStream->close();
}
fileReadWrite::fileReadWrite(string path, ofstream *writeStream, ifstream *readStream, fstream *ReadWriteStream) :
filePath(path), writeStream(writeStream), readStream(readStream),ReadWriteStream(ReadWriteStream)
{
fileReadWrite::fileReadWrite(string path, fstream *w) : filePath(path), ReadWriteStream(w) {
}
......@@ -5,8 +5,7 @@
#ifndef CPP_14_FILE_FILEREADWRITE_H
#define CPP_14_FILE_FILEREADWRITE_H
#include "iostream"
#include "string"
#include <fstream> //操作文件的头文件
using namespace std;
......@@ -22,16 +21,16 @@ public:
bool display = false; //是否把数据显示到屏幕
ofstream *writeStream= nullptr; //写文件对象
ifstream *readStream= nullptr; //读文件对象
fstream *ReadWriteStream= nullptr; //读写文件
ofstream *writeStream; //写文件对象
ifstream *readStream; //读文件对象
fstream *ReadWriteStream; //读写文件
fileReadWrite();
/*fileReadWrite();
fileReadWrite(string path);*/
fileReadWrite(string path);
fileReadWrite(string path,ofstream *writeStream);
fileReadWrite(string path,ofstream *writeStream,ifstream *readStream);
fileReadWrite(string path,ofstream *writeStream,ifstream *readStream,fstream *ReadWriteStream);
fileReadWrite(string path,ifstream *readStream);
fileReadWrite(string path,fstream *ReadWriteStream);
void openFile(model model, bool display); //打开文件,参数的含义是选择文件的操作模式、文件内容输出目的地
void close(); //关闭文件
......
#include <iostream>
#include <vector>
#include "fileReadWrite.h"
using namespace std;
int main() {
std::cout << "Hello, World!" << std::endl;
//文件路径: 在本项目路径下新建一个文本文件叫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;
}
文件已添加