c++讀寫.txt檔(以每行為單位)

  1. c++讀寫.txt檔(以每行為單位)

c++讀寫.txt檔(以每行為單位)

原文連結: https://darkblack01.blogspot.com/2014/01/ctxt.html
移植時的最後更新日期: 2015-12-23T14:16:57.743+08:00

初衷:

建立一個可以讀寫.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::vectorstd::string dtxt_Txt;

public:
bool Open(const char*);
bool Save(const char*);

void Close(){ ftxt_Std.close(); };

void iTxtData(std::vectorstd::string& data){ dtxt_Txt = data; mem2file(); };
void oTxtData(std::vectorstd::string& data){ file2mem(); data = dtxt_Txt; };
std::vectorstd::string 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::vectorstd::string::iterator it = dtxt_Txt.begin(); it != dtxt_Txt.end(); ++it)
{
*it += ‘\n’;
ftxt_Std.write(it->c_str(), it->length());
}
}
}</std::string>
主程式的使用情況
#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::vectorstd::string::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;
}