txt文件修改与读写

本文介绍了一种在不改变原有格式的情况下批量修改大型TXT文件内容的方法。通过创建临时文件来避免一次性加载整个文件到内存中,有效解决了内存占用大的问题。

    最近遇到了需要大量修改txt文件中指定内容的情况,尝试过fgets()、fwrite()和WriteString()、ReadString()两种搭配使用的方法。

    但是由于每使用一次前面提到的4个方法的其中之一,指针就会自动指向下一行,使得写入时原文件排版发生改变。

    而且因为txt文件体积较大的原因,使用一次将全部文档读取到内存中然后再在内存中对其进行修改,势必会消耗大量的内存,这不是任何一个人所期望的。

    最后采用了中间文件的方法解决上述问题。

#include <iostream>
#include <fstream>
#include <ostream>
#include <cstdlib>
#include <string>

using namespace std;

CString strFileName, strTempFile;
strTempFile.Format("%s\\Temp.txt", m_tszAppFolder);  //临时文件路径
strFileName.Format("%s\\Data.txt", m_tszAppFolder);  //源文件路径

string strLine;
//从源文件读取,修改字符串,并将字符串写到临时文件
fstream FileSrc(strFileName);
ofstream FileOut(strTempFile, ios::out|ios::trunc);
while(!FileSrc.eof())
{
    getline(FileSrc, strLine);
    //这里添加对字符串进行修改的代码
    
    FileOut << strLine << endl;
}
FileSrc.close();
FileOut.close();

//将临时文件中的数据会读到指定文件中
fstream FileSrc_1(strTempFile);
ofstream FileOut_1(strFileName, ios::out|ios::trunc);
while(!FileSrc_1.eof())
{
    getline(FileSrc_1, strLine);
    FileOut_1 << strLine << endl;
}
FileSrc_1.close();
FileOut_1.close();

//最后删除临时文件
DeleteFile(strTempFile);





转载于:https://my.oschina.net/u/2314763/blog/400760

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值