建立一個可以讀寫.txt檔的零件。
需求:
以每一行'\n'為單位,把vector<std::string>丟進去就可以得到文件文容。
可以讀取任意大小(至少是很大的)文件。
原始碼放在Github,以BSD LICENSE
kxTxtFile.h
#ifndef TXTFILE_H
#define TXTFILE_H
#include <vector>
#include <string>
#include <fstream>
class kxTxtFile
{
std::fstream ftxt_Std;
std::vector dtxt_Txt;
public:
bool Open(const char*);
bool Save(const char*);
void Close(){ ftxt_Std.close(); };
void iTxtData(std::vector& data){ dtxt_Txt = data; mem2file(); };
void oTxtData(std::vector& data){ file2mem(); data = dtxt_Txt; };
std::vector oTxtData(){ file2mem(); return dtxt_Txt; };
private:
void file2mem();
void mem2file();
};
#endif
kxTxtFile.cpp#include "kxTxtFile.h"
bool kxTxtFile::Open(const char* path)
{
ftxt_Std.open (path, std::ifstream::in);
return ftxt_Std.good();
}
bool kxTxtFile::Save(const char* path)
{
ftxt_Std.open (path, std::ifstream::out | std::ifstream::trunc);
return ftxt_Std.good();
}
void kxTxtFile::file2mem()
{
dtxt_Txt.clear();
std::string str;
while (getline(ftxt_Std , str))
dtxt_Txt.push_back(str);
}
void kxTxtFile::mem2file()
{
if (!dtxt_Txt.empty())
{
for (std::vector::iterator it = dtxt_Txt.begin(); it != dtxt_Txt.end(); ++it)
{
*it += '\n';
ftxt_Std.write(it->c_str(), it->length());
}
}
}
主程式的使用情況
#include <iostream>
#include <fstream>
#include <vector>
#include "kxTxtFile.h"
using namespace std;
int main()
{
kxTxtFile ifile;
if (!ifile.Open("readFilePath"))
std::cout << "read error" << std::endl;
std::vector vstr;
ifile.oTxtData(vstr);
ifile.Close();
for (std::vector::iterator it = vstr.begin(); it != vstr.end(); ++it)
std::cout << *it << std::endl;
kxTxtFile ofile;
if (!ofile.Save("saveFilePath"))
std::cout << "save error" << std::endl;
ofile.iTxtData(vstr);
ofile.Close();
return 0;
}
沒有留言:
張貼留言
(什麼是留言欄訊息?)