1.
本人想得到在打开文件对话框中选择的文件个数,能后用一个循环得到所有
的文件名。但文件个数如何得到?
2.
POSITION pos=filedialog.GetStartPosition();
CString str1=filedialog.GetNextPathName();
为什么是一个那么大的一个值,是如何得到的。
在vc++如何得到打开文件对话框中选择的多个文件名相关解决方法:1、
1. 一个简单的办法是当 GetNextPathName() 后不再变化就说明已经遍历了所有文件..
另...一定有函数得到文件个数的...查查 MSDN ....
2. 不明你说什么...
2、
用个变量累加,难道不行?
3、
在vc++如何得到打开文件对话框中选择的多个文件名推荐解答:
用GetFilePathName()
GetFielPathName(POSITION &pos)
若到列表尾,pos返回NULL
剩下的东西就看你如何处理了!
POSITION pos=filedialog.GetStartPosition();
pos得到的是列表中的一个文件路径名的位置!
4、
在vc++如何得到打开文件对话框中选择的多个文件名推荐解答:
打开文件系统对话框中,选择多个文件(CFileDialog)
CFileDialog dlg(TRUE,
_T("*.txt"),
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
_T("file (*.txt)|*.txt||"),
this);
int nOkCancel = dlg.DoModal();
if(nOkCancel == IDOK)
{
// append file to list
POSITION pos = dlg.GetStartPosition();
while (pos != NULL)
{
CString strFilePath=dlg.GetNextPathName(pos);
// find file path name yes or no in the list
if(m_ctlChoiseFileLt.FindString(-1,strFilePath)==LB_ERR)
{
// no find string then append to list
m_ctlChoiseFileLt.AddString(strFilePath);
}
}
}
5、
但本人想得到在打开文件对话框中选择的文件个数i,
CString str[FILES],
能后用一个循环for(int x=0;x<i,x++){ str[x]=dlg.GetNextPathName(pos);}
得到所有的文件名。文件个数如何得到?
6、
在vc++如何得到打开文件对话框中选择的多个文件名推荐解答:
agree with tengy1(逐日) && use_id(use_id)
对话框成员函数不会给你返回文件个数,只会返回一个链表的位置值,你必须顺序的根据位置来读出被选择文件,自己统计文件个数
7、
POSITION pos=filedialog.GetStartPosition();
CString str1=filedialog.GetNextPathName();
为什么pos是一个那么大的一个值,是如何得到的。
(本人在文档视图框架里也发现这种情况:POSITION vpos=pDoc->GetFirstViewPosition();)
8、
在vc++如何得到打开文件对话框中选择的多个文件名
try
{
CString str("",10000);//这是做为存放打开文件名和路径的字符串空间10000这个值的设置就觉得有些不妥当
CFileDialog openfile(true,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"All Files(*.*)|*.*|",AfxGetMainWnd());
openfile.m_ofn.lpstrFile=str.GetBuffer(10000);
openfile.m_ofn.nMaxFile=10000;
openfile.m_ofn.lStructSize=sizeof(openfile.m_ofn);
CString pathname("",MAX_PATH);
CFileStatus status;
openfile.DoModal();
POSITION mPos=openfile.GetStartPosition();
while(mPos!=NULL){
pathname=openfile.GetNextPathName(mPos);
CFile::GetStatus(pathname,status);
this->m_listresult.InsertItem(count++,pathname); //把包括路径在内的文件名写到一个list控件里
}
}
catch (CException* e)
{
AfxMessageBox(_T("打开文件出错了!"));
e->Delete();
}
我写的函数如下,但为什么一次最多只能打开1960个文件?望高手解答: void CRegexdlgDlg::OnOpenFile() { CString temp; int i=0; POSITION pos; CFileDialog dlg(TRUE,"",""); //下面一行是设置打开文件对话框——使之可以打开多个文件 TCHAR *pszFile = new TCHAR[MAX_PATH*MAX_PATH]; memset(pszFile,0,sizeof(TCHAR)*MAX_PATH*MAX_PATH); dlg.m_ofn.lpstrFile = pszFile; dlg.m_ofn.nMaxFile = MAX_PATH*MAX_PATH; dlg.m_ofn.Flags = OFN_ALLOWMULTISELECT|OFN_EXPLORER|OFN_ENABLEHOOK; if(dlg.DoModal()==IDOK) { //把起首位置赋值给pos pos=dlg.GetStartPosition(); //把打开的多个文件名赋值给fname数组 while(pos!=NULL){fname[i]=dlg.GetNextPathName(pos);i++;} temp.Format("%d",i); temp="一共打开了"+temp+"个文件"; AfxMessageBox(temp); } }
问题补充:
在CString temp;下面加一句 CString fname[9999];不然会出错,呵呵! CString temp; CString fname[9999];
使用CFileDialog类并设置OFN_ALLOWMULTISELECT标志时,OPENFILENAME结构体的lpstrFile成员是一个指向用
户申请分配的缓冲区,里面接受所选的路径和文件名列表,这个列表的每一项由一个NULL隔开,最末以两个NULL结束。
nMaxFile成员指明了缓冲区的大小,如果所选择的文件名的加起来的总长度超过了此值,则DoModal函数返回IDCANCEL,
如果用户试图打开超过缓冲区大小的文件集的话,CommDlgExtendedError()将返回FNERR_BUFFERTOOSMALL,这时
候,lpstrFile的前两个byte将会包含实际需要的缓冲区的字节数。 注意下面这句话 如果是在Windows NT 4.0下,能被拷贝到lpstrFile缓冲区的字节数被限制在2562字节以内,如果超过将被截断。