我的程序需要用CFileDialog打开很多文件,大概有好几百个,虽然设置了multiselect,但是打开文件太多时总是出错。请问怎么解决。
解决方案 »
- VS2008 动态库中 使用GetParentFrame() 报错!!,主程序使用正常
- 一个CListCtrl的问题,如何交换列
- 如何解析数据包
- DLL注入之后,怎么得到所注入程序的hProcess?
- 菜问题,为什么我用程序创建一个按钮出来,老是不见了???
- 如何在执行时隐藏窗口
- arx编程中ado错误-IDispatch* error 3149
- 关于OpenOffice
- 各位大虾有没有关于MFC图片 上传 显示 保存的例子啊 现在做一个档案管理 需要在个人信息里显示图片~~~
- gridctrl控件怎样选中单元格高亮显示?
- 如何判断当前焦点是可输入状态?
- 哪位有Cximage库显示GIF图片的代码吗
CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT
|OFN_HIDEREADONLY | OFN_PATHMUSTEXIST
| OFN_OVERWRITEPROMPT,
NULL,this);
TCHAR* szPathMulti = new TCHAR[8*1024* 1024]; //尽量给大些
dlg.m_ofn.nMaxFile = 8*1024* 1024;
dlg.m_ofn.lpstrFile = szPathMulti;
dlg.m_ofn.lpstrFile[0] = 0; if (dlg.DoModal() == IDOK)
{
POSITION pos = dlg.GetStartPosition();
while(pos)
while(pos)
{
szFileName=dlg.GetNextPathName(pos);
//这个就是文件名
}
}
delete[] szPathMulti;
|OFN_HIDEREADONLY | OFN_PATHMUSTEXIST
| OFN_OVERWRITEPROMPT,
NULL,this);
TCHAR* szPathMulti = new TCHAR[8*1024* 1024]; //尽量给大些
dlg.m_ofn.nMaxFile = 8*1024* 1024;
dlg.m_ofn.lpstrFile = szPathMulti;
dlg.m_ofn.lpstrFile[0] = 0; if (dlg.DoModal() == IDOK)
{
POSITION pos = dlg.GetStartPosition();
while(pos)
{
szFileName=dlg.GetNextPathName(pos);
//这个就是文件名
}
}
delete[] szPathMulti;
CFileDialog Filedlg(TRUE,NULL,NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT | OFN_EXPLORER,"BMP Files (*.bmp)|All files (*.*)|*.*|",NULL);
TCHAR *pBuffer = new TCHAR[MAX_PATH * 100];//最多允许100个文件
Filedlg.m_ofn.lpstrFile = pBuffer;
Filedlg.m_ofn.nMaxFile = 100*MAX_PATH;
Filedlg.m_ofn.lStructSize = 88; if(Filedlg.DoModal() == IDOK){
POSITION pos = Filedlg.GetStartPosition();
while(pos != NULL){
strpath = Filedlg.GetNextPathName(pos);
}
}
Filedlg.m_ofn.lStructSize = 88;
有什么用?
按你的方法,打开一个文件的时候又不对了。
CFileDialog dlg( TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, NULL, NULL );
DWORD MAXFILE = 256200; //2562 is the maxOFN_ALLOWMULTISELECT
dlg.m_ofn.nMaxFile = MAXFILE;
char* pc = new char[MAXFILE];
dlg.m_ofn.lpstrFile = pc;
dlg.m_ofn.lpstrFile[0] = NULL;
CString str;
int iReturn = dlg.DoModal();
if(iReturn == IDOK)
{
int nCount = 0;
POSITION pos = dlg.GetStartPosition();
while (pos != NULL)
{
str += dlg.GetNextPathName(pos);
nCount++;
}
AfxMessageBox(str);
}
delete []pc;goodboyws(深夜不眠者)这个兄弟的,在我计算机上我把8*1024*1024改为8*1024*500则单选多选都行,如不改这里也是不能选一个的情况,真怪真怪,就是在CFileDialog::DoModal()内部调用::GetOpenFileName(&m_ofn)时反回假?????是不是在微软内部做这个函数时有一个对单选与多选文件做了个开关什么的东西????????
当把缓冲区的大小设置为n*1024*1024时,多选正确,单选时dlg.DoModal()反回不等于IDOK。
当把缓冲区的大小设置为n*1023*1023时,多选单选都正确。
char* pc = new char[MAXFILE+1];
DWORD MAXFILE = 8000;
filedlg.m_ofn.nMaxFile = MAXFILE;
char* pc = new char[MAXFILE];
filedlg.m_ofn.lpstrFile = pc;
filedlg.m_ofn.lpstrFile[0] = NULL;
int iReturn = filedlg.DoModal();
if(iReturn == IDOK)
{
POSITION pos = filedlg.GetStartPosition();
while (pos != NULL)
{
str=filedlg.GetNextPathName(pos);
......
}
}
if(CommDlgExtendedError() == 0x3003)
AfxMessageBox("一次打开的文件数目过多!\n\n请分成多次添加。");
delete []pc;
我也试过当把缓冲区的大小设置为n*1024*1024时,多选正确,单选时dlg.DoModal()反回不等于IDOK。
当把缓冲区的大小设置为n*1023*1023时,多选单选都正确。
谢谢你的方法,我使用你的代码单多选都能通过,支持你