设为首页 加入收藏

TOP

3.3.7 具体实现(5)
2013-10-07 15:55:10 来源: 作者: 【 】 浏览:74
Tags:3.3.7 具体 实现

3.3.7  具体实现(5)

函数UpdataFile()能够根据参数str所指定的本地文件路径上传文件。首先读取本地文件内容到缓冲区中,利用函数Send()将缓冲区的内容发送到服务器。

(7) 下载文件函数DownLoadFile()的实现方法与函数UpdataFile()一样,其具体实现代码如下:

  1. void CFtp::DownLoadFile(CString filename)    
  2. //参数filename表示从列表中获取的文件名    
  3. {    
  4. int lenth;      //已经获取的文件大小    
  5. int i = 0;    
  6. archive->WriteString("RETR " + "\r\n");     
  7. //调用CArchive类的WriteString()函数发送RETR命令    
  8. archive->WriteString(filename + "\r\n"); //向服务器发送将要下载的文件名称    
  9. char buff[1024] = {0};            //设置缓冲区    
  10. SOCKET sock;    //与服务器建立连接成功后返回的套接字句柄    
  11. CFile file(filename, CFile::modeReadWrite);//建立文件并指定文件属性为可读可写    
  12. while(lenth != 0)     
  13. {    
  14. ::Recv(sock, buff, 1024, NULL);    //在套接字上接收数据到缓冲区中        
  15. file.Write(buff, 1024);          //将缓冲区内容写到文件中    
  16. lenthlenthlenth = lenth - 1024;  //从文件总大小中减去已经接收并写入文件中的大小    
  17. }   
  18. }  

这样就实现了以CFtp类封装发送命令、接收数据、获取文件属性和上传下载文件等FTP主要操作。当在程序中使用该类时,应将其头文件Ftp.hFtp.cpp加入到工程中,然后创建CFtp类对象,对各函数进行调用即可。

3. 使用CFtp类

当定义CFtp类后,在程序中就可以使用此类实现具体功能了。

用户登录服务器的方式可以是程序默认的匿名登录,也可以使用指定账号登录。其响应代码如下:

  1. void CFTPDlg::OnRadio2()    
  2. {    
  3. this->GetDlgItem(IDC_EDIT3)->EnableWindow(true);  //操作IDC_EDIT3编辑框    
  4. this->GetDlgItem(IDC_EDIT4)->EnableWindow(true);  //操作IDC_EDIT4编辑框    
  5. }   

当输入服务器IP地址等信息后,单击"连接服务器"按钮,程序根据用户提供的信息对服务器进行连接。该按钮对应的消息响应函数代码如下:
  1. void CFTPDlg::OnConnect()    
  2. {    
  3. CString str, str1;            //定义字符串变量    
  4. int port = 0;     //定义端口变量    
  5. this->GetDlgItem(IDC_EDIT1)->GetWindowText(str);        //获取IP字符串    
  6. this->GetDlgItem(IDC_EDIT2)->GetWindowText(str1);       //获取端口号码    
  7. port = (int)atoi(str1);                   //将端口字符串转换成数字    
  8. if(ftp.FTPConnect(str, port))        //调用CFtp对象的函数进行连接    
  9. {    
  10. this->GetDlgItem(IDC_EDIT5)-> 
  11. SetWindowText("连接成功!"); //通知用户连接状态    
  12. this->GetDlgItem(IDC_Connect)->EnableWindow(false);    
  13. //连接成功后,设置连接按钮为失效状态    
  14. ftp.Send("LIST/r/n");                  //发送命令获取文件列表信息    
  15. str = ftp.Recv(); //接收数据    
  16. ftp.GetFileStatu(str.GetAt(0));     //获取文件名称    
  17. }  
  18. }   

当客户端启动时可以获取到本地默认文件夹下的文件。在Visual C++(www.cppentry.com)中,查找文件的API函数是FindFirstFile()和FindNextFile()。函数原型分别如下:
  1. //开始查找文件并获得其句柄    
  2. HANDLE FindFirstFile(    
  3. LPCTSTR lpFileName,    
  4. FINDEX_INFO_LEVELS fInfoLevelId,    
  5. LPVOID lpFindFileData,    
  6. FINDEX_SEARCH_OPS fSearchOp,    
  7. LPVOID lpSearchFilter,    
  8. DWORD dwAdditionalFlags    
  9. );    
  10.  
  11. /从当前位置查找下一个文件    
  12. BOOL FindNextFile(    
  13. HANDLE hFindFile,    
  14. LPWIN32_FIND_DATA lpFindFileData    
  15. );   

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.3.7 具体实现(4) 下一篇3.3.7 具体实现(6)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)