在WinCE下使用ReadFile的问题?
界面程序,一个button,点击弹出CFileDialog,选择打开文件,程序实现如下:
#define MAX_BUFFER 1024*10
void CDLLTestDlg::OnSelfileBtn()
{
// TODO: Add your control notification handler code here
MessageBox(_T("AAA"));
m_strCode = _T("");
CFileDialog dlg(TRUE,_T("*.cnc,*.*"),NULL,NULL,_T("*.cnc|*.cnc|*.*|*.*||"));
if(dlg.DoModal() == IDOK)
{
m_strFileName = dlg.m_ofn.lpstrFile;
HANDLE hFile = NULL;
hFile = CreateFile(m_strFileName,GENERIC_READ,TRUE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
//Error
DWORD Error = GetLastError();
CloseHandle(hFile);
return ;
}
CHAR readBuffer[MAX_BUFFER] ;
memset(readBuffer,0,MAX_BUFFER);
//WinCE
WCHAR m_FileBuffer[MAX_BUFFER];
memset(m_FileBuffer,0,MAX_BUFFER);
DWORD Read,HaveReaded;
int times;
Read = 100;
HaveReaded = 0;
times = 0;
do
{
ReadFile(hFile,&readBuffer[times*Read],Read,&HaveReaded,NULL);
times++;
}while(HaveReaded == Read);
CloseHandle(hFile);
MultiByteToWideChar(CP_ACP,0,readBuffer,MAX_BUFFER,m_FileBuffer,MAX_BUFFER);
m_strCode.Format(_T("%s"),m_FileBuffer);
m_strCode += _T("\r\n\0"); //很重要
m_FileCodeEdit.SetWindowText(m_strCode);
m_InputCodeEdit.SetWindowText(m_strCode);
GetDlgItem(IDC_RUNCODE_BTN)->EnableWindow(FALSE);
}
}
当MAX_BUFFER定义为1024*20或者更大时,点击button按键,Wince系统死掉;当MAX_BUFFER定义为1024*10时程序运行正常,打开文件,读取文件内容多很好,不过只能读取10K文件字符。
问题:
1。为什么会出现这种情况,是不是申请的内存太大了?(我时由VC转到做evc的,时间不长)
2。如果是申请的内存过大也应该运行到定义readBuffer的地方死掉啊,一点buton就死,MessageBox没有弹出来,而定义MAX_BUFFER是1024*10的时候,程序运行很好。不解?
3。要一次读取大文件中所有内容该如何实现?
望高人解答!