对一个已存在文本文件重新写入,用的是CStdioFile类问题是:
1.如果我不在读完文件后再写入会出现最后一行存在和倒数第二行重复
2.如果我在读完后追加写入一个"\n"会多出一行空白的,就是比原文件要增加一行,也是说最后两行都为空行
PS:要删除其中某一行,边读边写,遇到符合删除条件的就用下一行替代,达到删除目的。
可能要有人建议重建一个文件,那是可以实现,但那样不是我想要的效果

解决方案 »

  1.   

    没有用过CStdioFile,但是,我觉得happyparrot说的有道理
    在File中,直接移动到文件末尾,然后写入数据
      

  2.   

    上面我说明白了呀,,,边读边写
    一个文件一边读,一边写
    如果读取过程中,发现符合要求的行,就删除FilePath="c:\\test.txt";
    RemoveUrl="http://www.baidu.com";
    CStdioFile sfr(FilePath,CFile::typeText|CFile::shareDenyNone|CFile::modeRead);
    CStdioFile sfw(FilePath,CFile::typeText|CFile::shareDenyNone|CFile::modeWrite);
    if(sfr && sfw)
    {
    CString strLine;
    while (sfr.ReadString(strLine))
    {
    if((strLine==RemoveUrl)||(strLine==""))
    {
    continue;
    }
    sfw.WriteString(strLine+'\n');
    }
    sfw.WriteString("\n");
    }
    sfw.Close();
    sfr.Close();
      

  3.   

    你说“如果读取过程中,发现符合要求的行,就删除 ”
    可在你的程序中只看到WriteString
    你到底在实现什么功能?
      

  4.   

    那你就删除行就行了。为何只看到WriteString,有何来你的问题?
      

  5.   

    试一下CFile::SetLength或者::SetFileValidData,设置有效长度,相当于删了最后的数据