MFC 读取http文件服务器上的文件列表,并选择文件进行下载

MFC 读取http文件服务器上的文件列表,并选择文件进行下载,第1张

你需要学会动态网页制作,至少简单的生成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如何遍历一个文件夹下的所有文件夹(不是文件,是文件夹)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10148197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存