none
txt 文件内容在修改 RRS feed

  • 问题

  • 我想问一下,如果我有一个txt文件,比如内容如下:

  • 您尝试过的步骤
  • 您尝试使用过的资源(包括链接)
  • 您的计算机的硬件或软件的详细信息(尤其是版本信息)。
  • 您认为可能相关的任何其

    现在我想修改其中"资源"两个字,并且将其修改为"材料",我用什么方法可以做到呢?什么语言都可以!

2011年3月6日 11:09

答案

  • 如果文件不大的话,您可以使用CFile类一次性将文件读入到缓冲区中,然后利用CString::Replace()替换,或者其他函数,最后再写入文件中。如果文件过大的话,可以考虑使用内存映射的方法去做。


    try
     {
      CFile file;
      file.Open(_T("F:\\11.txt"), CFile::modeReadWrite);
      DWORD len = static_cast<DWORD>(file.GetLength());
      char* buf = NULL;
      buf = new char[len+1];
      memset(buf, 0, sizeof(char) * (len+1));
      file.Read(buf, len);

      CString strText(buf);
      strText.Replace(_T("资源"), _T("材料"));

      delete[] buf;
      buf = NULL;

      USES_CONVERSION;
      buf = T2A(strText.GetBuffer(strText.GetLength()));
      strText.ReleaseBuffer(-1);
      file.SetLength(0);
      file.Write(buf, strlen(buf));

      file.Close();
     }
     catch (CException* e)
     {
      e->ReportError();
      e->Delete();
     }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 Warden_ 2011年3月7日 13:23
    2011年3月7日 6:12
    版主

全部回复

  • 不用编程,用Word或者UE进行全文替换即可。
    麻烦把正确答案设为解答。
    2011年3月6日 13:28
    版主
  • 这种答案就拜托你别回复了!

    2011年3月6日 15:33
  • 如果文件不大的话,您可以使用CFile类一次性将文件读入到缓冲区中,然后利用CString::Replace()替换,或者其他函数,最后再写入文件中。如果文件过大的话,可以考虑使用内存映射的方法去做。


    try
     {
      CFile file;
      file.Open(_T("F:\\11.txt"), CFile::modeReadWrite);
      DWORD len = static_cast<DWORD>(file.GetLength());
      char* buf = NULL;
      buf = new char[len+1];
      memset(buf, 0, sizeof(char) * (len+1));
      file.Read(buf, len);

      CString strText(buf);
      strText.Replace(_T("资源"), _T("材料"));

      delete[] buf;
      buf = NULL;

      USES_CONVERSION;
      buf = T2A(strText.GetBuffer(strText.GetLength()));
      strText.ReleaseBuffer(-1);
      file.SetLength(0);
      file.Write(buf, strlen(buf));

      file.Close();
     }
     catch (CException* e)
     {
      e->ReportError();
      e->Delete();
     }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 Warden_ 2011年3月7日 13:23
    2011年3月7日 6:12
    版主
  • 哈哈,我没有看明白你的需求,如果要制作对应的小程序,可以按照VisualEleven的方法。如果不适用MFC的话,你也可以通过iostream读取文件,然后使用std::string的find方法找到对应的关键字,然后将其替换成目标关键字。

     


    麻烦把正确答案设为解答。
    2011年3月7日 10:45
    版主
  • thank you very much for you help !

    I understand !

    2011年3月7日 13:23
  • thank you for your good advise !
    2011年3月7日 13:23