读书人

怎么在文件中替换一行数据

发布时间: 2012-03-21 13:33:14 作者: rapoo

如何在文件中替换一行数据
比如test.txt中有如下数据:
aaaaaa
111111
3333333

如何实现将改txt中的111111读取出来修改成222222
然后再写入test.txt中,结果为:
aaaaaa
222222
3333333
读出来是比较容易,我可以一行一行的读,可是写入该如何处理??

用fwrite CFile 或者CStdioFile实现?

[解决办法]
你可以读出文件内容,替换后写入新文件,然后删除原文件,再改名

方法不太好,可能有更简单的方法直接修改文件中一段内容


VC++中文本文件替换的函数:

例如把trap.log文件中的123替换成***,使用方法如下所示

ReplaceText(“.\\trap.log“,”123“,”***");

int ReplaceText(CString StrFileName,CString StrFind,CString StrReplace)
{
CStdioFile TempFile,File;
int Count=0;
if(!File.Open(StrFileName,CFile::modeRead))
return -1;
CString StrTempFileName=File.GetFileTitle()+".tmp";
if(!TempFile.Open(StrTempFileName,CFile::modeCreate|CFile::modeReadWrite))
return -1;
CString Str;
while(File.ReadString(Str))
{
Count+=Str.Replace(StrFind,StrReplace);
TempFile.WriteString(Str+"\n");
}
File.Close();
TempFile.Close();
CFile::Remove(StrFileName);
CFile::Rename(StrTempFileName,StrFileName);
return Count;
}

[解决办法]

C/C++ code
// VS2008 win32 console application,support MFC#include "stdafx.h"int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){    try    {        CStdioFile file;        LPCTSTR pszFile = _T("F:\\11.txt");        file.Open(pszFile, CFile::modeRead);        CString strText;        DWORD dwPos = 0;        LPCTSTR pszSrc = _T("111111");        LPCTSTR pszDes = _T("222222\n");        while(file.ReadString(strText))        {            if(strText == pszSrc)            {                dwPos = (DWORD)file.GetPosition() - (_tcslen(pszSrc) + _tcslen(_T("\r\n")));                break;            }        }        file.Close();        file.Open(pszFile, CFile::modeWrite);        file.Seek(dwPos, CFile::begin);        file.WriteString(pszDes);        file.Close();    }    catch(CException* e)    {        e->ReportError();        e->Delete();    }    return 0;}// 11.txt (ANSI文本文件)aaaaaa111111333333444444程序运行之后文件内容aaaaaa222222333333444444 

读书人网 >VC/MFC

热点推荐