请教Windows Mobile 的CFileDialog问题。

zhuyf87 2012-12-01 10:37:50
采用CFileDialog或者GetOpenFileNameEx,想让用户选择他想打开的文件。
之前程序在WinCE系统上工作没有问题,现在移植到Windows Mobile系统上。
出现的问题是,弹出的选择对话框无法识别zip文件,即使我文件过滤用*.*,
也无法显示出zip压缩文件。但是我用系统的资源管理器,进入到相应文件夹下,
是可以看到这个压缩文件的。请教大家,这个问题如何解决。代码如下:

CString zip_file_path;

CFileDialog file_dialog(TRUE, NULL, NULL, NULL, TEXT("*.zip|*.zip||"));
if (file_dialog.DoModal() != IDOK)
return;

zip_file_path = file_dialog.GetPathName();


或者

	
OPENFILENAMEEX ofn = {0};
TCHAR szFile[MAX_PATH] = {0};

ofn.lStructSize = sizeof(ofn);
ofn.lpstrFilter = _T("ZIP Files (*.*)/0*.*/0");
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile)/sizeof(szFile[0]);
ofn.lpstrInitialDir = _T("\\DOWNLOAD");
ofn.lpstrTitle = _T("选择数据文件");
ofn.ExFlags = OFN_EXFLAG_THUMBNAILVIEW | OFN_EXFLAG_HIDEDRMPROTECTED;
GetOpenFileNameEx(&ofn);

CString strFileName = ofn.lpstrFile;
...全文
443 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyf87 2012-12-03
  • 打赏
  • 举报
回复
引用 2 楼 dzq138 的回复:
重写了这个玩意~~ 花了不少时间去重写...
能否分享一下 -_-
dzq138 2012-12-03
  • 打赏
  • 举报
回复
重写了这个玩意~~ 花了不少时间去重写...
dzq138 2012-12-03
  • 打赏
  • 举报
回复
就是全部枚举文件,并过滤,自己对字符串查找. 参考下面的代码:

void CDZQOPENFILEDLG::doFileEnumeration()
{	//枚举文件夹的内容
	HANDLE hSearch;                // FindFirstFile函数返回的句柄
	WIN32_FIND_DATA  fd;           // 文件的数据结构
	BOOL bFinished = FALSE;        // 循环结束标志
	//TCHAR *szFname = TEXT("\\*");  // 要查找的文件名
	LPSYSTEMTIME filetime;
	SYSTEMTIME   systime;   
	FILETIME   localtime;
	CString szFname;
	CString sFileName;
	CString sFileExe;
	LVITEM li;
	li.iItem=5000;
	li.mask=LVIF_TEXT;
	int iItem;
	
	int i;
	i=m_ListView.GetItemCount();
	while(i>1)
	{//因为最后一行不能删除,所在要先判断是否大于一才执行.
		i--;
		m_ListView.DeleteItem(i);//删除内容
	}
	if (L"\\" == m_Path)
	{
		szFname= m_Path + L"*";
	}
	else
	{
		szFname= m_Path + L"\\*";
	}
	//先加入文件夹
	
	hSearch = FindFirstFile(szFname, &fd);
	if (hSearch == INVALID_HANDLE_VALUE)
	{  	//没找到,返回
		return;
	}
	bFinished=false;
	do 
	{
		if (  (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
		{//是文件夹
			li.pszText=fd.cFileName;
			li.iSubItem=0;
			iItem= m_ListView.InsertItem(&li); 
			m_ListView.SetItemText (iItem,1,L"文件夹"); 
			FileTimeToLocalFileTime(&fd.ftLastWriteTime,&localtime);   
			FileTimeToSystemTime(&localtime,&systime);   //最后修改日期  
			sFileExe.Format( L"%d/%d/%d %d:%d:%d",systime.wYear,systime.wMonth,systime.wDay ,systime.wHour ,systime.wMinute,systime.wSecond );  
			m_ListView.SetItemText (iItem,2,sFileExe); 
		}
		if (!FindNextFile (hSearch, &fd))
		{	//已经查找到最后一个文件,置结束标志
			bFinished = TRUE;
		}
	} while (!bFinished);

	for (i=0 ;i<m_CFileType[m_iType].iTypeNum ;i++)
	{
		if (L"\\" == m_Path)
		{
			szFname= m_Path + m_CFileType[m_iType].sTypeValue[i]; 
		}
		else
		{
			szFname= m_Path + L"\\" + m_CFileType[m_iType].sTypeValue[i]; 
		}
		// 确认是否有文件存在.
		hSearch = FindFirstFile(szFname, &fd);
		if (hSearch == INVALID_HANDLE_VALUE)
		{  	//没找到,返回
			return;
		}
		bFinished=false;
		do 
		{ 
			if (  (fd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) )
			{//是文件
				sFileName=fd.cFileName;
				
				if ( -1 ==SearchPos(sFileName,sFileExe,L"."))
				{
					sFileExe="";
				}
				li.iSubItem=0;
				li.pszText=sFileExe.GetBuffer(0) ;
				iItem= m_ListView.InsertItem(&li); 
				m_ListView.SetItemText (iItem,1,sFileName); 
				FileTimeToLocalFileTime(&fd.ftLastWriteTime,&localtime);   
				FileTimeToSystemTime(&localtime,&systime);   //最后修改日期  
				sFileExe.Format( L"%d/%d/%d %d:%d:%d",systime.wYear,systime.wMonth,systime.wDay ,systime.wHour ,systime.wMinute,systime.wSecond );  
				m_ListView.SetItemText (iItem,2,sFileExe); 
				//CString   arrivetime=2005年1月5日10时10分10秒   
				//int   year,month,day,hour,min,second;   
				//sscanf(arrivetime,"%d年%d月%d日%d时%d分%d秒",&year,&month,&day,&hour,&min,&second);
				
			}
			if (!FindNextFile (hSearch, &fd))
			{	//已经查找到最后一个文件,置结束标志
				bFinished = TRUE;
			}
		} while (!bFinished);
	}
	FindClose (hSearch);  // 关闭句柄.
	
}


zhuyf87 2012-12-01
  • 打赏
  • 举报
回复
把ofn.ExFlags = OFN_EXFLAG_THUMBNAILVIEW | OFN_EXFLAG_HIDEDRMPROTECTED;注释掉也不行 我现在发现.dat、.exe、.txt等文件都显示不出来,只能显示图片.bmp的文件。 我发现采用GetOpenFileNameEx可能不行,MSDN里面说到:This function creates a system-defined dialog box that shows a grid of thumbnails, enabling the user to choose a picture or video. 不清楚为什么CFileDialog也不行。

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧