一个读写文件的问题 我现在需要对一个文件进行数据操作,需要对文件中间一段数据进行删除,请问怎么做才能达到最优化?我想过把文件内容读进内存里操作,但如果文件太大就不是很合适如果写临时文件,可能会导致io操作太多而影响性能。请各位ggddjjmm帮帮忙!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为如果写临时文件,文件太大的话也是需要进行多次io操作(循环读写),你知道的,太多io操作会导致性能变差,而且有可能出错。 同意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); 谢谢各位的帮助,我这边的问题后来还是直接操作内存了,文件最大只有几兆。特别谢谢sunheart(深蓝) ,: Free_Man(浪迹天涯) , kenwhale(屠夫),尤其是sunheart(深蓝) 兄,加删除标志给了我一个新的思路。 在MFC中怎样把一个类里的函数地址转换成DWORD vc怎么写数据库查询的代码?新人请教 刚刚切了项有建的卵蛋,请大家观摩!并庆祝这个轮子终于没有睾丸了!!! 我大四了,马上就开始找工作了,学mfc前途到底怎么样啊? 关于托盘的一个简单问题! 想在对话框中放个静态控件static,然后在上面画图,怎么能取得它的客户区呢?在classwizard中看不到static... 急!!!读文件问题!! 如何使用数码相机的PIM信息 问一个小问题!谢谢! 在多文档中打开两个窗口怎样画一条线穿过这两窗口呢??? 使用内存DC不能绘图。 在线求助。
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);
特别谢谢sunheart(深蓝) ,: Free_Man(浪迹天涯) , kenwhale(屠夫),尤其是sunheart(深蓝) 兄,加删除标志给了我一个新的思路。