比如一个文件有120KB
我要把最后的20KB内容删掉,保留前100KB的内容。

解决方案 »

  1.   

    我一般将CFile的内容读到CString中,然后读取左边的100KB再写回到文件中去。
      

  2.   

    你们的办法都不对,看我的:
    CFile file;
    file.Open("test.dat", CFile::modeReadWrite);
    DWORD dwLength = file.GetLength();
    dwLength -= 20 * 1024;
    file.SetLength(dwLength);
    file.Close();
      

  3.   

    楼上的方法是行得通,但 vcforever(霓裳羽衣)得方法也是可以实现的啊,不要说人家不对嘛;)
    还是把异常加上吧,呵呵。。
    try{
        CFile file("test.txt", CFile::modeReadWrite);
        DWORD dwLength = file.GetLength();
        dwLength -= 20 * 1024;
        file.SetLength(dwLength);
        file.Close();
    }
    catch(CFileException* e){
        e->ReportError();
        e->Delete();
    }
        
      

  4.   

    try{
        CFileException e
        CFile file("test.txt", CFile::modeReadWrite,&e);
        DWORD dwLength = file.GetLength();
        dwLength -= 20 * 1024;
        file.SetLength(dwLength);
        file.Close();
    }
    catch(CFileException* e){
        e->ReportError();
        e->Delete();
    }
      

  5.   

    to dreamchild(梦小孩) :
      会的啊,我试过了~~~~~
      

  6.   

    使用文件指针来实现。
        假设文件中[78K,79K]这部分内容要删除,则可用[79K,文件尾]的数据直接覆盖[78K,文件尾]那部分数据,从面实现了[78K,79K]这部分内容的删除工作。
        操作函数如下:
    bool DeleteFileMidContent(CString szFullFilePath,
                           DWORD dwDeleteBeginPos, 
                           DWORD dwDeleteBytesCount)
    {
        CFile src, dest;
        if(src.Open(szFullFilePath, CFile::modeReadWrite|CFile::shareDenyNone)
            && dest.Open(szFullFilePath, CFile::modeReadWrite|CFile::shareDenyNone))
        {
            dest.Seek(dwDeleteBeginPos, CFile::begin);
            src.Seek(dwDeleteBeginPos + dwDeleteBytesCount, CFile::begin);//略过要删除的部分
            
            const WORD wBufSize = 1024;
            BYTE buf[wBufSize];
            
            DWORD readBytesCount = src.Read(buf, wBufSize);
            while(readBytesCount)
            {
                dest.Write(buf, readBytesCount);
                src.Read(buf,wBufSize);
            }        src.Close();
            dest.Close();
            return true;
        }
        return false;
    }
      

  7.   

    用老函数实现:
    FILE *f;if((f=fopen("文件名","rb+"))==NULL) {exit(0);} int Handle=fileno(f);
    chsize(Handle,100000-20000); // 改变文件长度 100k 变成 80k fclose(f);