怎么在文件中替换一行数据
如何在文件中替换一行数据
比如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;
}
------解决方案--------------------
比如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文本文件) aaaaaa 111111 333333 444444 程序运行之后文件内容 aaaaaa 222222 333333 444444