3.3.7 具体实现(7)
m_c1是CComboBox类的对象。通过上述代码可以获取用户所选择目录下的所有文件并且显示在列表中。用户获取服务器文件名称和获取本地文件名称的实现方法一样,使用CFtp类函数GetFileStatu()获取服务器文件名称,然后设置列表控件的栏目即可,所以这里不再赘述。
在本地文件列表中,用户需要响应右键消息。在右键消息响应函数中获取文件名称,调用CFtp类的函数UpDataFile()上传文件。具体代码如下:
- void CFTPDlg::OnRclickList1(NMHDR *pNMHDR, LRESULT *pResult)
- {
- CString str1;
- int i = this->GetDlgItem(IDC_LIST1)->GetCurSel(); //获得单击鼠标位置的索引
- CString str =
- this->GetDlgItem(IDC_LIST1)->GetText(i); //获取索引位置的文件名称
- WIN32_FIND_DATA filedata = {0}; //初始化结构体WIN32_FIND_DATA
- HANDLE filehand;
- filehand = ::FindFirstFile("C:\\*", &filedata); //查找C盘下所有文件
- while(
- ::FindNextFile(filehand, &filedata)) //在文件中查找与指定文件名称相同的文件
- {
- if(str == (LPTSTR)filedata.cFileName)
- {
- str1 += "C:\\" + str; //构造文件完整路径
- ftp. UpdataFile("str"); //上传指定文件
- }
- }
- }
在上传函数中,使用列表控件中的函数GetCurSel()获取指定索引,再调用函数GetText()获取文件名称。然后使用函数FindFirstFile()和FindNextFile()查找对应的文件,构造完整路径后调用CFtp类函数UpDataFile()上传该文件。
在服务器文件列表中,响应右键消息。其消息响应函数如下:
- void CFTPDlg::OnRclickList2(NMHDR *pNMHDR, LRESULT *pResult)
- {
- int i = this->GetDlgItem(IDC_LIST1)->GetCurSel(); //获得单击鼠标位置的索引
- CString str =
- this->GetDlgItem(IDC_LIST1)->GetText(i); //获取索引位置的文件名称
- WIN32_FIND_DATA filedata = {0}; //初始化结构体WIN32_FIND_DATA
- HANDLE filehand;
- filehand = ::FindFirstFile("ftp://127.0.0.1/ftp", &filedata);
- //查找服务器下ftp文件夹中的内容
- while(
- ::FindNextFile(filehand, &filedata)) //在文件中查找与指定文件名称相同的文件
- {
- if(str == (LPTSTR)filedata.cFileName)
- {
- str1 += " ftp://127.0.0.1\ftp\" + str; //构造文件完整路径
- ftp.DownLoadFile(str); //调用CFtp类的DownLoadFile()函数进行下载
- }
- }
- }
通过上述内容,讲解了自定义类CFtp的使用方法。读者可以尝试扩展其内容,首先在文件Ftp.h中自定义函数或数据。然后在文件Ftp.cpp中写出自定义函数的代码即可。至此整个项目的主要模块分析完毕,其他模块的实现代码读者可以参阅本书附带光盘中的源代码。此项目的执行效果如图3-12所示。
|
| 图3-12 执行效果 |