用CFileDialog 打开多个文件,并在ListCtrl中输出文件名(不包括路径),该程序得到的filename有问题,因为在n=filename.ReverseFind('\\')返回结果是-1,就是没找到,比较纳闷,请帮我解答一下,错在哪儿?先谢了CFileDialog dlg(TRUE,_T("*.txt"),NULL,OFN_HIDEREADONLY
| OFN_ALLOWMULTISELECT,_T("file (*.txt|*.txt||"),this);
int nOkCancel = dlg.DoModal();
CString filename;
TCHAR *pBuffer = new TCHAR[MAX_PATH * 100];//最多允许100个文件
dlg.m_ofn.lpstrFile = pBuffer;
dlg.m_ofn.nMaxFile = 100*MAX_PATH;
dlg.m_ofn.lStructSize = 88; if(nOkCancel == IDOK)
{
filename=dlg.GetFileName ();/////////////////
POSITION pos = dlg.GetStartPosition();
while(pos != NULL)
{
filename=dlg.GetNextPathName (pos);
// 转换为不含路径的文件名
int n=0;
n=filename.ReverseFind('\\');
CString str;
str.Format(_T("第%d层"), n);
AfxMessageBox(str);
filename=filename.Right(filename.GetLength()-n-1);
////////////////////////////////////
int nItem=m_list1.GetItemCount ();
m_list1.InsertItem (nItem,filename);
} }
| OFN_ALLOWMULTISELECT,_T("file (*.txt|*.txt||"),this);
int nOkCancel = dlg.DoModal();
CString filename;
TCHAR *pBuffer = new TCHAR[MAX_PATH * 100];//最多允许100个文件
dlg.m_ofn.lpstrFile = pBuffer;
dlg.m_ofn.nMaxFile = 100*MAX_PATH;
dlg.m_ofn.lStructSize = 88; if(nOkCancel == IDOK)
{
filename=dlg.GetFileName ();/////////////////
POSITION pos = dlg.GetStartPosition();
while(pos != NULL)
{
filename=dlg.GetNextPathName (pos);
// 转换为不含路径的文件名
int n=0;
n=filename.ReverseFind('\\');
CString str;
str.Format(_T("第%d层"), n);
AfxMessageBox(str);
filename=filename.Right(filename.GetLength()-n-1);
////////////////////////////////////
int nItem=m_list1.GetItemCount ();
m_list1.InsertItem (nItem,filename);
} }
解决方案 »
- VS遇到错误很频繁,大家有遇到过吗?是自身工程原因还是VS不稳定,是VS2003的MFC工程哦
- c++动态链接库
- CWebBrowser控件中的HTML语言调用VC中函数的问题
- 大家好,一个CListView视图切分窗口后,无法显示缩略图?
- WinApp 封装了对 ini文件的操作.那么怎么找到这个ini文件呢~
- 关于VC6。0安装的问题
- 如何在VC中用程序访问网上邻居中的计算机,其中访问2000时要输入用户名和密码,怎么在程序中输入
- activeX与COM有什么区别?
- 大家推荐几个比较好的界面库
- 文档/视结构问题
- 我的窗口失去焦点的时候响应不了WM_KILLFOCUS
- 祝中秋快乐,帮忙看段代码数据库update语句
memset(pBuffer,0,MAX_PATH*100);同时别忘了,用完了之后delete[] pBuffer
filename是空白,还是有问题。
dlg.m_ofn.lpstrFile = pBuffer;
dlg.m_ofn.nMaxFile = 100*MAX_PATH;
dlg.m_ofn.lStructSize = 88;
这些都是废代码而且有错误,删掉。
lpstrFile 中保存的是对话框打开文件的路径
你这样赋值就把那个路径删除了
注释掉就可以
能得到filename,呵呵
你在找找看吧
我这可以,我把DoModal()位置调了一下
CString filename;
TCHAR *pBuffer = new TCHAR[MAX_PATH * 100];//最多允许100个文件
memset(pBuffer,0,MAX_PATH*100);
dlg.m_ofn.lpstrFile = pBuffer;
dlg.m_ofn.nMaxFile = 100*MAX_PATH;
dlg.m_ofn.lStructSize = 88;
int nOkCancel = dlg.DoModal();
if(nOkCancel == IDOK)
filename=dlg.GetFileName ();/////////////////
POSITION pos = dlg.GetStartPosition();
filename=dlg.GetFileName ();///////////////// 这句没用,去掉看看。方法正确,你单步调试看看。
非常谢谢jimoguilai反复帮忙调试
zaodt的建议也不错
分数少,只能意思一下了,谢谢诸位