我现在需要对一个文件进行数据操作,需要对文件中间一段数据进行删除,请问怎么做才能达到最优化?
我想过把文件内容读进内存里操作,但如果文件太大就不是很合适
如果写临时文件,可能会导致io操作太多而影响性能。
请各位ggddjjmm帮帮忙!!!

解决方案 »

  1.   

    因为如果写临时文件,文件太大的话也是需要进行多次io操作(循环读写),你知道的,太多io操作会导致性能变差,而且有可能出错。
      

  2.   

    同意kenwhale(屠夫),顺便给你一段例子。 /*
        HANDLE  hFile = CreateFile( "mapping.txt" ,
                                    GENERIC_READ | GENERIC_WRITE ,
                                    FILE_SHARE_READ | FILE_SHARE_WRITE ,
                                    NULL ,
                                    OPEN_EXISTING ,
                                    FILE_ATTRIBUTE_NORMAL ,
                                    NULL );    HANDLE hFilemap = CreateFileMapping( hFile ,
                                              NULL ,
                                              PAGE_READWRITE ,
                                              0 ,
                                              100 ,
                                              NULL );
    */ HANDLE hFilemap=CreateFileMapping((HANDLE)0xFFFFFFFF,
      NULL,
      PAGE_READWRITE,
      0,
      100,
      "SHARED"); if( hFilemap == NULL )
    MessageBox( "Sam A:Error1" ); LPVOID pVoid=MapViewOfFile(hFilemap,FILE_MAP_ALL_ACCESS,0,0,0); if( pVoid == NULL )
    MessageBox( "Sam A:Error2" ); memset(pVoid,0,100);
    strcpy((char *)pVoid,"0000000000"); //创建变量 //////////////////////////
    //CWnd * m_Wnd = FindWindow( NULL , "SamB" );
    //::SendMessage( m_Wnd->m_hWnd , WM_DATACOMING , 0 , 0 ); //////////////////////////
    MessageBox( "下面语句是关闭映射文件,请不要点击按钮。" );
    CloseHandle(hFilemap);
    UnmapViewOfFile(pVoid);
      

  3.   

    谢谢各位的帮助,我这边的问题后来还是直接操作内存了,文件最大只有几兆。
    特别谢谢sunheart(深蓝) ,: Free_Man(浪迹天涯) , kenwhale(屠夫),尤其是sunheart(深蓝) 兄,加删除标志给了我一个新的思路。