void CEasyDownLoadDlg::OnBtnDownLoad()
{
// TODO: Add your control notification handler code here
CString m_PathName; CFileDialog dlg( FALSE, _T("*.*"), NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("All Files (*.*)|*.*||"),
NULL ); //弹出保存对话框, if ( dlg.DoModal() != IDOK)
return ; m_PathName = dlg.GetPathName();
//下载环节
CInternetSession is;
CStdioFile *psf;
UpdateData();
psf = is.OpenURL( m_Add, 1, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
CFile file(m_PathName,
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);//建立本地文件 char buf[READ_BYTE_SIZE];
int readbyte;
while(1)
{
readbyte = psf->Read( buf, READ_BYTE_SIZE);//每次下载READ_BYTE_SIZE字节数据
if ( !readbyte)
break;
file.Write( buf, readbyte); //把下载的数据写入到文件中
} psf->Close();
file.Close();
delete psf;
AfxMessageBox("下载结束"); }
1,这样写,好像只能实现http下载,不能ftp下载,ftp下载怎么办?
2,如何实现进度,即时速度.
3,这样下载应该是先把文件下载到内存,然后移到硬盘吧,那要是文件很大怎么办?
4,这样下载的时候,程序是卡死状态的,按钮都不显示了,应该创建新线程下载吧,要怎么做? 大侠们,能回答几个就回答几个吧,谢谢.
要是源码更好,给个下载链接也行csdn上有吗?
{
// TODO: Add your control notification handler code here
CString m_PathName; CFileDialog dlg( FALSE, _T("*.*"), NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("All Files (*.*)|*.*||"),
NULL ); //弹出保存对话框, if ( dlg.DoModal() != IDOK)
return ; m_PathName = dlg.GetPathName();
//下载环节
CInternetSession is;
CStdioFile *psf;
UpdateData();
psf = is.OpenURL( m_Add, 1, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
CFile file(m_PathName,
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);//建立本地文件 char buf[READ_BYTE_SIZE];
int readbyte;
while(1)
{
readbyte = psf->Read( buf, READ_BYTE_SIZE);//每次下载READ_BYTE_SIZE字节数据
if ( !readbyte)
break;
file.Write( buf, readbyte); //把下载的数据写入到文件中
} psf->Close();
file.Close();
delete psf;
AfxMessageBox("下载结束"); }
1,这样写,好像只能实现http下载,不能ftp下载,ftp下载怎么办?
2,如何实现进度,即时速度.
3,这样下载应该是先把文件下载到内存,然后移到硬盘吧,那要是文件很大怎么办?
4,这样下载的时候,程序是卡死状态的,按钮都不显示了,应该创建新线程下载吧,要怎么做? 大侠们,能回答几个就回答几个吧,谢谢.
要是源码更好,给个下载链接也行csdn上有吗?
解决方案 »
- 对话框的小问题,纯属送分~
- 新手跪求各位,ADO连接oracle数据库open处报错(情况不同)
- 求助!!!MFC中CListCtrl中list第一项的显示只能靠左,怎样居中或靠右?
- 求教不用注册标 读取机器的主机名,MAC,DNS,默认网关等等信息
- 要做爸爸啦 各位进来帮俺 想个名字
- 两个奇怪的问题,adCmdProc未定义?连接字符串太长?
- 对话框程序如何进行空闲处理?
- 晕~!#¥%¥¥¥!¥—……%*—……(base class undefine……)
- 我的图像是8位的灰度图像,怎么设置glTexImage2D的参数呢?
- Windows SDK编程
- 从模块中收集资源的问题
- 打开多个非模态对话框, 现在我按下一个按钮就把全部非模态对话框关闭
UINT ThreadFunc(LPVOID pParam)
这个是多线程
至于线程同步之类的自己找点东东看。
3开双缓冲区,第一个写满之后立刻向第二个缓冲区写,
在写第二个缓冲区的时候把第一个缓冲区的内容移到硬盘
反复执行就ok了,这个是循环缓冲区。