我有一个TXT文件,我想在指定位置和开头位置插入字符串,该怎么来实现?
用CFile::write写入的时候并不是插入,而是改写原来的文本,不知道如何才能插入,请高手指教?

解决方案 »

  1.   

    我看没有好办法(也许是我想不出来,^_^),
    比如要在文件头加入一行,在第五行后加入一行,则可以用CStdioFile把文件的内容一行一行读出来,进行操作,再重新写这个文件(覆盖原来的内容):CStringArray   arrLines;//存储文件中的行的数组arrLine.Add( "head Line" );//加入第一行
    CStdioFile  file;
    file.open(...);CString strAfterFifth;//在第五行后要加的行
    int i = 0;
    while( file.ReadString( str ) )
    {
         i++;
         if ( i == 5 )
         {
              arrLines.Add( strAfterFifth );
          }
    }file.Seek( 0, CFile::begin );
    int nCount = arrLines.GetSize();
    for ( int i = 0; i < nCount; i++ )
    {
         file.WriteString ( arrLines[i] );
    }file.Close();
      

  2.   

    把原文件全读出来
    然后在开始位置写入。。
    然后写old文件或都用链表,方便一些!~把要插入字符串加入,或是插入!
      

  3.   

    CString str;

    CHARRANGE crPos;
    CRichEditView *pView = GetView();
    CRichEditCtrl &edit = pView->GetRichEditCtrl();

    //用CHARRANGE结构体获得选择的文本位置
    edit.GetSel(crPos);
    //要写的内容为12345
    str = "12345";
    //如果没有选中文本,就直接写在光标后
    //如果选中了文本,就替代选中的文本
    if (crPos.cpMin != crPos.cpMax)
    {
    edit.SetSel(crPos.cpMin, crPos.cpMax);
    }
    else
    {
    edit.SetSel(crPos.cpMax, crPos.cpMax);
    }

    edit.ReplaceSel(str);
      

  4.   

    用内存映射文件
    CreateFileMapping()以及相关函数,请查阅msdn
    可以将对文件的操作转为对内存的操作