新手入门,最近用VS2017写了个从FTP服务器下载文件并且与进度条同步的程序,其中遇到了很多问题,现在把我的思路写出来供大家参考。
连接上FTP很简单,这边就不做详细介绍了,连接上服务器后需要做以下两件事:
1,读取目标文件的大小
2,创建两个线程用于下载文件和更新进度条
读取文件很简单,先找到目标文件后直接读取文件大小就可以,需要用到CFtpFileFind,代码提供参考。
pFtpFFind = new CFtpFileFind(psMyCFtpConnection);
BOOL FtpFile = pFtpFFind->FindFile("temp\\Adobe.Photoshop.CS3.Extended-snear.rar");//在FTP上找到文件
FtpFile = pFtpFFind->FindNextFile();
创建线程也不难,使用 AfxBeginThread即可。重点讲一下如何更新进度条。以下都是在进程中完成
1,读取正在下载的文件大小
2,将正在下载的文件大小与之前读取的文件大小进行比较,在循环中对进度条进行更新、读取正在下载的文件大小和判断是否下载完成。
参考代码:
CFileStatus status, statuss;
CFile::GetStatus("文件", status);
int lSizeOfFile = 0;
CMFCftpDlg *p = (CMFCftpDlg*)pParam;
CProgressCtrl *speed = (CProgressCtrl*)pParam;
int FtpFileSize = pFtpFFind->GetLength();
while (lSizeOfFile < FtpFileSize+1)
{
speed->SetPos(lSizeOfFile);
CFile::GetStatus("文件", status);
lSizeOfFile = status.m_size;
if (lSizeOfFile == FtpFileSize)
{
p->MessageBox("下载完成~", "Hello", MB_OK);
break;
}
}
不要忘了先对进度条进行设置。