提交 1b4e42c3 编写于 作者: W wsb

封装文件操作类

上级 96ad613d
......@@ -3,4 +3,4 @@ project(cpp_14_file)
set(CMAKE_CXX_STANDARD 11)
add_executable(cpp_14_file main.cpp)
add_executable(cpp_14_file main.cpp fileReadWrite.cpp fileReadWrite.h)
//
// Created by 11010 on 2023/4/9.
//
#include "fileReadWrite.h"
#include "io.h"
//空构造方法
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 *writeStream, ifstream *readStream) :
filePath(path), writeStream(writeStream), readStream(readStream) {
if (path.length() == 0) cout << "文件路径为空!";
}
void fileReadWrite::openFile(fileReadWrite::model model, bool display) {
char c[100]; //保存控制台输入,最大字数不超过100个
//路径为空,给出提示结束函数运行
if (filePath.empty()) {
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); //所有文件读追加到末尾
//从控制台接收数据,敲击回车键结束输入
cout<<"请输入要保存到文中的名字,不超过100个字符,按下回车键结束输入!"<<endl;
cin.getline(c,100); //接收输入
//把输入的字符写入到文件中
writeStream->write(c,100);
//判断是显示到屏幕还是写入到文件
if (display) {
cout<<"你输入的数据为:"<<endl;
cout<<c<<endl;
}
break;
//如果是读文件
case read:
writeStream->open(filePath, ios::in); //读模式打开
//把输入的字符写入到文件中
readStream->read(c,100); //最大读取100个字符,并存储在char数组中
cout<<"读取的文件完毕!:"<<endl;
//判断是显示到屏幕还是写入到文件
if (display) {
cout<<"读取的文件内容如下:"<<endl;
cout<<c<<endl;
}
break;
//如果是读写文件
case readWrite:
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();
}
fileReadWrite::fileReadWrite(string path, ofstream *writeStream, ifstream *readStream, fstream *ReadWriteStream) :
filePath(path), writeStream(writeStream), readStream(readStream),ReadWriteStream(ReadWriteStream)
{
}
//
// Created by 11010 on 2023/4/9.
//
#ifndef CPP_14_FILE_FILEREADWRITE_H
#define CPP_14_FILE_FILEREADWRITE_H
#include "iostream"
#include "string"
#include <fstream> //操作文件的头文件
using namespace std;
//文件的读取与写入
class fileReadWrite {
public:
string filePath; //文件路径
enum model {
read, write, readWrite
} model1; //读写模式枚举
bool display = false; //是否把数据显示到屏幕
ofstream *writeStream= nullptr; //写文件对象
ifstream *readStream= nullptr; //读文件对象
fstream *ReadWriteStream= nullptr; //读写文件
fileReadWrite();
fileReadWrite(string path);
fileReadWrite(string path,ofstream *writeStream);
fileReadWrite(string path,ofstream *writeStream,ifstream *readStream);
fileReadWrite(string path,ofstream *writeStream,ifstream *readStream,fstream *ReadWriteStream);
void openFile(model model, bool display); //打开文件,参数的含义是选择文件的操作模式、文件内容输出目的地
void close(); //关闭文件
};
#endif //CPP_14_FILE_FILEREADWRITE_H
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册