您的位置:首页 > 编程语言 > C语言/C++

C++读取写入.txt文件(ifstream/ofstream)—读取指定行,修改指定行,复制文件,清除文件,统计文件行数

2017-07-25 11:38 3415 查看
C++对txt文件的操作是基于fstream/ifstream/ofstream类的,使用时需添加头文件包含:

#include<fstream>
针对txt文件的操作大体包括基本的读写,读取指定行,修改指定行,复制文件,清除文件,统计文件行数等几种,分别实现如下;

以下重点在于实现几个操作,关于这一块的基础知识参考:C++文件读写详解(ofstream,ifstream,fstream)

1、统计txt文件行数;

/*
**统计txt文件行数
*/
int CountLines(string filename)
{
ifstream ReadFile;
int n = 0;
string tmp;
ReadFile.open(filename, ios::in);//ios::in 表示以只读的方式读取文件
if (ReadFile.fail())//文件打开失败:返回0
{
return 0;
}
else//文件存在
{
while (getline(ReadFile, tmp, '\n'))
{
n++;
}
ReadFile.close();
return n;
}
}
2、复制txt文件;

/*
**复制txt文件
*/
void copyTxt(string srcFilename, string dstFilename)
{
ifstream infile;
ofstream outfile;
string temp;
infile.open(srcFilename, ios::in);
outfile.open(dstFilename, ios::trunc | ios::out);
if (infile.good())
{
while (!infile.eof())
{
getline(infile, temp, '\n');
outfile << temp << '\n';
}
}
infile.close();
outfile.close();

}
3、清除txt文件;

/*
**清除txt文件
*/
void clearTxt(string filename)
{
ofstream text;
text.open(filename, ios::out | ios::trunc);//如果重新设置需要
text.close();
}
4、修改指定行数据
/*
**修改指定行数据
*/
void ResetLine(string file,int line)
{
int total = CountLines(file);
if (line > total || line < 1)
{
MessageBox(_T("修改超出配置文件行数范围"));
return;
}
string bup = _T(".\\tmp.txt");//备份文件
copyTxt(file,bup);
ifstream rfile;
ofstream wfile;
rfile.open(bup,ios::in);
wfile.open(file,ios::out|ios::trunc);

string str;
int i = 1;
while (!rfile.eof())
{
if (i == line)
{
CString strMFC;
strMFC.Format(_T("%f %f %f\n"), m_pAssistCam, m_tAssistCam, m_zAssistCam);
wfile << strMFC.GetBuffer(0);//写入修改内容
}
else
{
//rfile.getline()
getline(rfile, str, '\n');
wfile << str << '\n';
}
i++;
}
rfile.close();
wfile.close();
}
5、读取指定行数据

/*
**读取txt指定行数据存入string
*/
string readTxt(string filename, int line)
{
//line行数限制 1 - lines
ifstream text;
text.open(filename, ios::in);

vector<string> strVec;
while (!text.eof())  //行0 - 行lines对应strvect[0] - strvect[lines]
{
string inbuf;
getline(text, inbuf, '\n');
strVec.push_back(inbuf);
}
return strVec[line - 1];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: