现在有一个日志文件,里面的信息是分行存储的,也就是说一行一个日志,
读取时候是分行读,
可是现在我需要对里面的特定行进行删除,文件中处理后最多保留10行数据,
开发中提供相应的接口,比如MoveFirst()就是移动到文件头,MoveLast()就是移动到文件尾,可是我在做MoveNext的时候,我却没有头绪,如果我要移动到下一行的时候,首先我 要确定当前文件对象的存在性(SHIT,这个我也不会,好像是验证一下),然后确定当前指针指的行的位置,然后将指针移动到下一行,并返回当前行的内容。
当然,也有格式化文件的功能,就是说有时候有些行是空行,需要删除,并向上移动下面的内容一行
我用了stdiofile的readstring功能,但只是读取没有操作具体行的功能,比如删除什么的,用Seek也是百思不得其解,因为Seek的第一个参数是移动多少字节,这个很难,我还一直在找有没有一定一行的,呵呵,可惜没有,
大家能不能根据我这里的情况给一些参考建议或者一些指导,谢谢

解决方案 »

  1.   

    以下是删除文件中某行 CStringArray strarray;
    CStdioFile file;
    if( !file.Open("c:\\1.txt", CFile::modeRead) )
    {
    AfxMessageBox("can not open file!");
    return;
    }
    CString strLine;
    while(file.ReadString(strLine))
    {
    strarray.Add(strLine);
    }
    file.Close();

    CString str;
    int nCount=strarray.GetSize();
    for(int i=0; i<nCount; i++)
    {
    str = strarray[i];
    if( str.Find("key") != -1)
    {
    strarray.RemoveAt(i);
    nCount--;
    i--;
    }
    }
    if( !file.Open("c:\\1.txt", CFile::modeCreate|CFile::modeWrite) )
    {
    AfxMessageBox("can not open file!");
    return;
    }
    for(i=0; i<strarray.GetSize(); i++)
    {
    str = "";
    str = strarray[i] + "\n";
    file.WriteString(str);
    }
    file.Close();
      

  2.   

    文件映射到内存中,用mem家族的函数修理它们.
      

  3.   

    如果我想实现ADO中那种MoveNext()的功能,应该怎么实现?指针如何确立?定义什么类型的对象?文件操作用哪个类?