我一个MFC的dialog程序中,处理一个button的click事件时偶尔会跳出"不能打开未命名文件"这样的错误消息.在大多数机器上没有这个问题,只是在几个机器上会出现这个问题.why?
程序代码如下://其中SYSLOG是一个系统日志文件,m_lvFile是一个有3列的list viewvoid CFTClientDlg::OnBtnAdd()
{
CFileDialog dlg(TRUE,"","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
"所有文件(*.*)|*.*|"); if(IDOK==dlg.DoModal())
{
CFile file;
CFileStatus filestatus;
CString strFilePath, strFileSize, strFileTime;
unsigned long lFileSize;
POSITION pos = dlg.GetStartPosition(); while (pos)
{
strFilePath = dlg.GetNextPathName(pos);
if( file.Open( strFilePath, CFile::modeRead|CFile::shareDenyNone ) <0 ||
file.GetStatus( filestatus) == false )
{
char strError[256];
_snprintf( strError, 255, "无法打开文件%s,请检查文件是否存在",strFilePath.GetBuffer(-1) );
SYSLOG.WriteLog( LOG_ERROR, strError );
MessageBox( strError, NULL, MB_OK|MB_ICONWARNING );
if( file.operator HFILE() != CFile::hFileNull )
file.Close();
continue;
}
lFileSize = file.GetLength();
strFileSize.Format("%d字节", lFileSize); strFileTime = filestatus.m_mtime.Format("%Y%m%d %H:%M:%S"); int idx = m_lvFile.InsertItem( m_lvFile.GetItemCount(), strFilePath );
m_lvFile.SetItemText( idx, 1, strFileSize );
m_lvFile.SetItemText( idx, 2, strFileTime ); if( file.operator HFILE() != CFile::hFileNull )
file.Close();
}
}
}
程序代码如下://其中SYSLOG是一个系统日志文件,m_lvFile是一个有3列的list viewvoid CFTClientDlg::OnBtnAdd()
{
CFileDialog dlg(TRUE,"","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
"所有文件(*.*)|*.*|"); if(IDOK==dlg.DoModal())
{
CFile file;
CFileStatus filestatus;
CString strFilePath, strFileSize, strFileTime;
unsigned long lFileSize;
POSITION pos = dlg.GetStartPosition(); while (pos)
{
strFilePath = dlg.GetNextPathName(pos);
if( file.Open( strFilePath, CFile::modeRead|CFile::shareDenyNone ) <0 ||
file.GetStatus( filestatus) == false )
{
char strError[256];
_snprintf( strError, 255, "无法打开文件%s,请检查文件是否存在",strFilePath.GetBuffer(-1) );
SYSLOG.WriteLog( LOG_ERROR, strError );
MessageBox( strError, NULL, MB_OK|MB_ICONWARNING );
if( file.operator HFILE() != CFile::hFileNull )
file.Close();
continue;
}
lFileSize = file.GetLength();
strFileSize.Format("%d字节", lFileSize); strFileTime = filestatus.m_mtime.Format("%Y%m%d %H:%M:%S"); int idx = m_lvFile.InsertItem( m_lvFile.GetItemCount(), strFilePath );
m_lvFile.SetItemText( idx, 1, strFileSize );
m_lvFile.SetItemText( idx, 2, strFileTime ); if( file.operator HFILE() != CFile::hFileNull )
file.Close();
}
}
}
解决方案 »
- MFC ActiveX控件中如何添加用户界面?
- 怎么使用骨架矢量字体,不是轮廓矢量字体啊。我要在绘图仪里来画,所以需要一划一划的,而不是轮廓矢量。
- 关于 (VC|VB) && MODEM && TAPI && 传真的问题~~ (2)
- 在本窗体,如何把别的窗体的控件的值赋掉?
- 怎么做?
- msflexgrid可以在最后一行显示合计?合计这行不能移动
- 怎样将汉字转化为拼音
- 如何建立一个udp服务器,采用多线程还是指令序列?关注有分!(1000分)
- 获得系统快照的问题
- 没办法,别的地方没高手,这里人气最旺,只好贴这里了。。。关于数据访问。。。
- 如何设置CEdit中光标输入位置.
- 消息类命名管道的数据读写问题
m_ofn.lpstrFile = szFile;
m_ofn.nMaxFile = 200; // Maximum of 200 files
char
sBuffer[6000]; sBuffer[0] = 0; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, "C source|*.cpp|All files|*.*||"); dlg.m_ofn.lpstrFile = sBuffer; dlg.m_ofn.nMaxFile = 6000; 如果缓冲区不够大,CommDlgExtendedError()函数的返回值为FNERR_BUFFERTOOSMALL,并且缓冲区的前两个字节包括需要的大小
dlg.m_ofn.nMaxFile = 2560;//你自己设置足够大的缓冲区大小
char pc[2560];
dlg.m_ofn.lpstrFile = pc;
dlg.m_ofn.lpstrFile[0] = 0;