你需要学会动态网页制作,至少简单的生成TXT文本,就是网站WEB程序读取目录中的文件列表,以TXT或XML输出
你还需要学会MFC网络编程,就是MFC程序访问/下载某个网址的网页,其实就是读取/下载网站WEB程序动态生成的TXT或者XML内容
当然你也可以静态生成TXT或者XML放置在WEB服务器上
显示的话,就是ListControl,ListView一类,可自绘
下载文件和下载/读取网页基本相同,只是网页是文本是string(当然原始也是BYTE[]),而文件就是很多个字节是BYTE[]
总结的话,就是一个是服务器端要放置有提供文件列表内容的文件
再一个就是MFC网络访问/读取这个文件,解析得到文件列表
学会使用ListControl
和读取网页一样,按字节接收即可
CFileDialog 打开多个文件2006-12-01 17:28从CFileDialog派生一个类MFileDlg: 头文件://///////////////////////////////////////////////////////////////////////////
// MFileDlg dialogclass MFileDlg : public CFileDialog
{
DECLARE_DYNAMIC(MFileDlg)public:
MFileDlg(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd pParentWnd = NULL);
int DoModal();
virtual ~MFileDlg();
protected:
//{{AFX_MSG(MFileDlg)
// NOTE - the ClassWizard will add and remove member functions here
//}}AFX_MSG TCHAR m_pszFile;
////////
DECLARE_MESSAGE_MAP()}; 类实现://///////////////////////////////////////////////////////////////////////////
// MFileDlgIMPLEMENT_DYNAMIC(MFileDlg, CFileDialog)MFileDlg::MFileDlg(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
DWORD dwFlags, LPCTSTR lpszFilter, CWnd pParentWnd) :
CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
{
m_pszFile = new TCHAR[2048]; //set a 2K buffer to hold selected files
m_pszFile[0] = '\0'; //initialize pointer;
}
BEGIN_MESSAGE_MAP(MFileDlg, CFileDialog)
//{{AFX_MSG_MAP(MFileDlg)
// NOTE - the ClassWizard will add and remove mapping macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()MFileDlg::~MFileDlg()
{
if (m_pszFile != NULL)
delete [] m_pszFile; //cleanup
}int MFileDlg::DoModal()
{
ASSERT_VALID(this);
ASSERT(m_ofnFlags & OFN_ALLOWMULTISELECT); //make sure multiple file selection is on m_ofnlpstrFile = m_pszFile; //initialize the OPENFILENAME structure
m_ofnnMaxFile = 2048;
return CFileDialog::DoModal();
} 具体使用: MFileDlg dlg( TRUE,_T("TXT"),_T("TXT"),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
_T("文本文件 (txt)|txt所有文件 ()||"));
if(dlgDoModal()!=IDOK) return FALSE; //取消 *** 作 POSITION pos = dlgGetStartPosition();
while (pos != NULL)
{
CString strPath = dlgGetNextPathName(pos);
if (strPathFind(":\\\\") == 1 && strPathGetLength() > 4)
{
// this means we have an invalid path that looks like this:
// C:\\cdadgl
// get rid of extra slash
CString temp;
temp = strPathLeft(3);
temp += strPathMid(4);
strPath = temp;
}
m_listFileNamesAddTail(strPath); //CStringList m_listFileNames
TRACE(_T("GetOpenFileName returned %s Files\r\n"),strPath);
}
用下面的程序段可以实现你要求的功能
CFileFind ff;
CString strDir= "d:\\Program Files\\";
BOOL res = ffFindFile(strDir);
while(res)
{
res = ffFindNextFile
if(ffIsDirectory() && (!ffIsDots()))();//遍历子目录,剔除"0”和""两个
{
CString strFile = ffGetFileName();
…
// 在这里写需要的代码
}
}
ffClose(); // 不要忘记关闭
若满意请及时采纳,谢谢
把以下代码放到Win32控制台运行,亲测可用:
#include <windowsh>
#define FILEILTER "" //查找条件,例如查找exe格式的那么就用exe,当然也可以直接用setupexe
#include "iostreamh"
#include "stdioh"
BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\", lpszPath[0]);
return (lstrcmp(szRoot, lpszPath) == 0);
}
void FindInAll(LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))
lstrcat(szFind, "\\");
lstrcat(szFind, FILEILTER); // 找所有文件
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
return;
do
{
if (wfdcFileName[0] == '')
continue; // 过滤这两个目录
if (wfddwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfdcFileName);
else
{
wsprintf(szFile, "%s\\%s", lpszPath, wfdcFileName);
FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归
}
}
else
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
{
wsprintf(szFile, "%s%s", lpszPath, wfdcFileName);
}
else
{
wsprintf(szFile, "%s\\%s", lpszPath, wfdcFileName);
printf("%s\n",szFile);
}
// 对文件进行 *** 作
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // 关闭查找句柄
}
int main(int argc, char argv[])
{
FindInAll("E:"); //这里设置目录为E:,请根据需要更改
return 0;
}
CFileDialog dlg(FALSE, _T("SQL"), _T(""),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("Text Files(txt)|txt|SQL Files(sql)|sql|All Files()|||"));
if ( dlgDoModal()!=IDOK )
return;
//获取文件的绝对路径
CString sFileName=dlgGetPathName();
遍历当前文件夹查找jpg的文件,jpg表示类型为jpg类型的文件,每找到一个把变量计数器给加1啊,给你个遍历文件夹,找jpg类型文件,具体你自己的使用还要小修改,
以上就是关于MFC 读取http文件服务器上的文件列表,并选择文件进行下载全部的内容,包括:MFC 读取http文件服务器上的文件列表,并选择文件进行下载、MFC中请问能不能用一个CFileDialog同时打开多个文件那样是怎么设置的呢、MFC如何遍历一个文件夹下的所有文件夹(不是文件,是文件夹)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)