用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);
} }
解决方案 »
- safearrayDestroy不能释放safearray,有内存泄露
- 单文档视图怎么取消掉工具栏的工具栏选项
- 多客户端数据库查询与通讯协议问题!
- 我无法解决的CTreeCtrl的节点付值问题?
- vb调用win32的DLl问题??
- 相应WM_KEYDOEN消息的OnKeyDown中的nRepCnt到底是什么意思啊?
- 客户需要看程序的测试报告吗?
- 非常急!!小妹向各位请教关于VC中调用带有参数的可执行应用程序和使用批处理文件的问题!
- 一起学习,一起进步,为了我们共同珍爱的VC,有意者留个名
- 怎么样去修改一个文件的大小?使之为0!
- 我的窗口失去焦点的时候响应不了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的建议也不错
分数少,只能意思一下了,谢谢诸位