FTP客户端课程设计报告书培训资料1_第1页
FTP客户端课程设计报告书培训资料1_第2页
FTP客户端课程设计报告书培训资料1_第3页
FTP客户端课程设计报告书培训资料1_第4页
FTP客户端课程设计报告书培训资料1_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、t工心工 1之室士号计算机网络课程设计课题名称FTP客户机搭建学院信息工程学院专业 网络工程班级学号姓名目录和索引21 、功能需求2、开发环境与工具3、所需要知识21、FTP实现的基本原理1 )概要( 2 )上传和下载(3)用户FTP和匿名FTP(4) ASCII 和 Binary(5)Port 和 Passive三、完成进度31 、已完成部分2、未完成部分3、还需改善的部分四、FTP服务工作过程4517五、详细设计 51、CFtpDlg类的一些函数定义2、CFtpOperate的一些函数定义六、测试结果 29七、用户手册 32八、实验归纳总结32FTP客户端程序一、需求分析1、功能需求(1)

2、实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。(2)提供登录界面,上传下载界面、帮助界面、关于界面。(3)通过输入服务器地址、用户名和密码,可以实现远程FTP主机的登录。(4)提供本地文件和文件夹的上传功能,可对FTP主机文件进行下载和删除文件。(5)提供对本地目录的读取与返回,能正确列出文件和文件夹,在没有登录服务器 前可以作为一个简单的文件查询工具对本地文件进行查询。(6)帮助页面可以对用户提供使用说明。(7)关于界面包含设计者的信息。(9)要求开发出的FTP客户端符合规范 FTP协议规范,支持 ASCII传输模式和二进制 数据传输模式(10) FTP的两种工作模式的选择

3、Port模式(主动)和 Passive模式(被动)2、开发环境与工具(1)使用的IDE:使用VC+6.0作为开发环境IDE(2)使用的语言:C+(3)使用的开发包:使用MFC WinInet(4)开发平台: Windows 73、所需要知识(1)计算机网络的基本知识(2) 了解FTP基本实现原理(2)使用VC+6.0IDE进彳T MFC§序开发的基本知识(3)熟悉 WinInet中属于FTP部分的操作(4)熟悉文件或文件夹操作(5)熟悉控件的操作,如在 List Ctrol 添加图片(浏览文件或文夹的图标)二、知识理解1、FTP实现的基本原理(1)概要Internet是一个非常复杂的

4、计算机环境,Internet 上的计算机已有上千万台,而这些计算机可能运行不同的操作系统,有运行Unix的服务器,也有运行Dos、Windows的PC机等等,而各种操作系统之间的文件交流问题,需要建立一个统一的文件传输协议,这就是所谓的 FTP。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客

5、户机。使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。(2)上传和下载"下载"文件就是从远程主机拷贝文件至自己的计算机上;" 上传 " 文件就是将文件从自己的计算机中拷贝至远程主机上(3)用户FTP和匿名FTP 用户FTP:种方式为已在FTP服务器上建立了特定帐号的用户使用,需要合法的用户名和密码才能登录到远程计算机传输文件。匿名FTP:用户作为“anonymous登录到FTP服务器,不需要有自己的用户名和 密码。( 4) ASCII 和 BinaryASCII: 文本传输器使用 ASCII 字符,并由回车键和换行符分开Bi

6、nary: 二进制不用转换或格式化就可传字符, 二进制模式比文本模式更快, 并且 可以传输所有ASCII值,所以系统经管员一般将FTP设置成二进制模式。(5)Port 和 Passive Port 模式 ( 主动 ): FTP 客户端首先和FTP 服务器的 TCP 21 端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT 命令包含了客户端用什么端口接收数据。 在传送数据 的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端 口发送数据。FTP server必须和客户端建立一个新的连接用来传送 数据。Passive模式(被动):Pa

7、ssive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port 命令,而是Pasv 命令。 FTP 服务器收到Pasv命令后,随机打开一个高端端口(端口号大于 1024)并且 通知客户端在这个端口上传送数据的请求,客户端连接 FTP 服务 器此端口,然后FTP 服务器将通过这个端口进行数据的传送,这个时候 FTP server 不再需要建立一个新的和客户端之间的连接。三、完成进度1、已完成部分(1)实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。( 2 )提供登录界面,上传下载界面、帮助界面、关于界面(3)通过输入服务器地址、用户名和密码,可以实现远

8、程FTP主机的登录。(4)提供本地文件上传功能,可对FTP主机文件进行下载和删除文件。( 5 )提供对本地目录的读取与返回,能正确列出文件和文件夹,在没有登录服务器前可以作为一个简单的文件查询工具对本地文件进行查询。( 6 )帮助页面可以对用户提供使用说明。( 7 )关于界面包含设计者的信息(帮助界面和关于界面整合在一起) 。( 9)支持ASCII 传输模式和二进制数据传输模式,外加自动选择的模式( 10 ) FTP 的两种工作模式的选择Port 模式(主动)和Passive 模式(被动)( 11)提供用户操作的状态信息输出2、未完成部分只提供了本地文件的上传功能, 暂时不能提供文件夹的上传功

9、能, 由于当初 没有使用多线程对服务器端进行操作,若上传或下载的文件过大,会导 致界面陷入长时间的不响应中。由于时间问题,就不再进行多线程的扩 充,也就不提供文件夹的上传功能。3、还需改善的部分( 1 )使用多线程进行操作(2)提供文件夹上传和文件夹下载功能(3)改进界面,提供更方便的操作(4)增加上传和下载的队列(5)同时可连接多个 FTP服务器(6)改善提示信息(7)账户。密码等用户资料在本地加密后保存(8)增加更多的功能,如下载完成后关机等(9)等四、FTP服务工作程建立控制追接»1 i111111 1111 111111 1,1目录请求r目录响应<建立数据连接F目录列3

10、A 1 ._n:五、详细设计(1) CFtpDlg类的一些函数定义BOOL CFtpDlg:OnInitDialog()CDialog:OnInitDialog() 。/ Add "About." menu item to system menu. IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBO X)ASSERT(IDM_ABOUTBOX < 0xF000)CMenu* pSysMenu = GetSystemMenu(FA

11、LSE)。if (pSysMenu != NULL)CString strAboutMenu 。strAboutMenu.LoadString(IDS_ABOUTBOX) 。if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR)pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu)。SetIcon(m_hIcon, TRUE) 。SetIcon(m_hIcon, FALSE) 。m_ctrBinary.SetCheck(1)。m_ctrActive.S

12、etCheck(1)。m_editPort.SetWindowText("21") 。bBinary1 = 1。 / 使用二进制bPassive1 = 0。 / 使用主动myPort = 21。m_imgList.Create(20,20,ILC_COLOR32,0,0) 。 / 创建图像列表m_imgList.SetBkColor(RGB(255,255,255) 。 / 文件夹图标hIconFold = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FOLDER)/ 文件图标hIconFile = :LoadI

13、con(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FILE)m_imgList.Add(hIconFold)。m_imgList.Add(hIconFile)。m_ctrlLocalFile.SetImageList(&m_imgList,LVSIL_SMALL)。 / 关联m_ctrlServerFile.SetImageList(&m_imgList,LVSIL_SMALL)。 / 关联m_editServer.SetWindowText("ftp:/") 。m_editName.SetWindowText(&

14、quot;") 。m_editPassword.SetWindowText("")m_btnCon.EnableWindow(TRUE) 。m_btnClo.EnableWindow(FALSE) 。m_ctrlLocalFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES) 。m_ctrlServerFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES) 。文件名 ",LVCFMT_LEFT,140,0) 。 / 设置列文

15、件类型",LVCFMT_LEFT,100,1) 。修改日期",LVCFMT_LEFT,100,2) 。文件名 ",LVCFMT_LEFT,140,0) 。 / 设置列文件类型",LVCFMT_LEFT,100,1) 。修改日期",LVCFMT_LEFT,100,2) 。m_ctrlLocalFile.InsertColumn(0," m_ctrlLocalFile.InsertColumn(1," m_ctrlLocalFile.InsertColumn(2,"m_ctrlServerFile.InsertColu

16、mn(0, m_ctrlServerFile.InsertColumn(1," m_ctrlServerFile.InsertColumn(2,"/ 添加硬盘盘符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL)TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T(" ")GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings)size_t szDriveString=:strl

17、en(pDriveStrings)。while(szDriveString>0)m_ctrlLocal.AddString(pDriveStrings) 。pDriveStrings+=szDriveString+1 。szDriveString=:strlen(pDriveStrings)。int index = m_ctrlLocal.FindString(0,"c:")。m_ctrlLocal.SetCurSel(index) 。m_strLocPath = "c:"。 / 初始化为 c 盘ListLocFile() 。cFtpOpr.set

18、Eidt(&m_ediMessage) 。return TRUE 。 / return TRUE unless you set the focus to a controlvoid CFtpDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout 。dlgAbout.DoModal() 。elseCDialog:OnSysCommand(nID, lParam) 。void CFtpDlg:OnPaint()if (IsIconic()CPaintDC

19、 dc(this) 。 / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0)。int cxIcon = GetSystemMetrics(SM_CXICON)。int cyIcon = GetSystemMetrics(SM_CYICON)。CRect rect 。GetClientRect(&rect) 。int x = (rect.Width() - cxIcon + 1) / 2。int y = (rect.Height() - cyIcon + 1) /

20、2。dc.DrawIcon(x, y, m_hIcon) 。 elseCDialog:OnPaint()HCURSOR CFtpDlg:OnQueryDragIcon() return (HCURSOR) m_hIcon 。/ 连接服务器void CFtpDlg:OnBtnConnect()/ TODO: Add your control notification handler code herem_editServer.GetWindowText(m_strServer) 。 / 记录 FTP服务器地址 CString strtemp 。m_editPort.GetWindowText(s

21、trtemp) 。 myPort = :atoi(strtemp) 。 / 获得设置的端口号 int i 。if (bAnony = 0) / 不使用匿名m_editName.GetWindowText(m_strName) 。/ 记录 FTP登陆用户名m_editPassword.GetWindowText(m_strPassword) 。 / 记录 FTP登陆用户密码i = cFtpOpr.set(m_strServer,m_strName,m_strPassword) 。 else / 使用匿名CString strNameTemp 。m_editName.GetWindowText(s

22、trNameTemp) 。 / 匿名登陆的用户名 i = cFtpOpr.set(m_strServer,strNameTemp,"") 。 if (i) / 设置成功,打开连接 if (cFtpOpr.OpenConnection()/ 连接成功m_btnClo.EnableWindow(TRUE) 。m_btnCon.EnableWindow(FALSE) 。 UpdateServerFile() 。 / 更新服务器的文件显示 m_ctrlServer.ResetContent() 。 CString temp 。cFtpOpr.GetPath(temp) 。m_ctr

23、lServer.AddString(LPSTR)(LPCTSTR)temp) 。m_ctrlServer.SetCurSel(0)。m_chkAnony.EnableWindow(FALSE) 。m_ctrActive.EnableWindow(FALSE) 。CButton *temp2 =(CButton*)GetDlgItem(IDC_PASSIVE) 。temp2->EnableWindow(FALSE) 。 m_editPort.EnableWindow(FALSE) 。else/ 连接失败void CFtpDlg:OnBtnClose()/ 关闭连接if (cFtpOpr.C

24、loseConnection()/ 关闭成功m_btnClo.EnableWindow(FALSE) 。m_btnCon.EnableWindow(TRUE) 。m_ctrlServerFile.DeleteAllItems() 。m_ctrlServer.ResetContent() 。m_ctrActive.EnableWindow(TRUE) 。CButton *temp2 =(CButton*)GetDlgItem(IDC_PASSIVE) 。temp2->EnableWindow(TRUE) 。m_editPort.EnableWindow(TRUE) 。m_chkAnony.

25、EnableWindow(TRUE) 。/ 双击本地文件列表控件中的选项void CFtpDlg:OnDblclkListLocalfile(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code herePOSITION p=m_ctrlLocalFile.GetFirstSelectedItemPosition()if (p = NULL)return 。/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlLocalFile.GetNextSele

26、ctedItem(p)。/ 获得选中的内容/ 得到第 index 行. 第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlLocalFile.GetItemText(index,0)。CString SecondColumn = m_ctrlLocalFile.GetItemText(index,1)if (index = 0) / 返回上层目录int k = m_strLocPath.GetLength() - 1。if (m_strLocPath.Right(2) = ":")return 。/ 删除当层的工程int ix = m_

27、ctrlLocal.FindString(0,m_strLocPath)。if (ix != CB_ERR) m_ctrlLocal.DeleteString(ix) 。 for (int j = k -1。 j >= 2 。 -j)if (m_strLocPath.GetAt(j) = '') m_strLocPath = m_strLocPath.Left(j+1) 。 break 。 ListLocFile() 。*pResult = 0。return 。 if (SecondColumn=" 文件夹 ") CString strTemp = F

28、irstColumn 。 m_strLocPath += strTemp + ''。ListLocFile()。 / 更新本地磁盘文件显示 else if (SecondColumn=" 文件 ") / 点到的是文件,进行上传if (cFtpOpr.ReStatus()=2) cFtpOpr.PutFtpFile(m_strLocPath + FirstColumn,FirstColumn) UpdateServerFile() 。 / 更新服务器的文件显示 *pResult = 0。 void CFtpDlg:OnDblclkListServerfile(

29、NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here / 获取选中的的一个位置POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition() if (p = NULL) return 。/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p)。/ 获得选中的内容,得到第 index 行. 第 0 列的内容 (下标从 0开始 )

30、CString FirstColumn=m_ctrlServerFile.GetItemText(index,0)。CString SecondColumn = m_ctrlServerFile.GetItemText(index,1) CStringArray ServName 。int nFileNumber=0 。if (index = 0) / 返回上层目录 if (cFtpOpr.setBackPath() = 0) *pResult = 0。return 。UpdateServerFile() 。 / 更新服务器的文件显示CString temp 。m_ctrlServer.Res

31、etContent() 。cFtpOpr.GetPath(temp) 。m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp) 。m_ctrlServer.SetCurSel(0)。*pResult = 0。return 。if (SecondColumn=" 文件夹 ")if (cFtpOpr.setNextPath(FirstColumn) = 0) *pResult = 0。return 。 UpdateServerFile() 。 / 更新服务器的文件显示 CString temp 。m_ctrlServer.ResetContent

32、() 。cFtpOpr.GetPath(temp) 。m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp) 。m_ctrlServer.SetCurSel(0)。 else if (SecondColumn=" 文件 ") / 点到的是文件,进行下载cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath) 。 ListLocFile() 。 *pResult = 0。 / 将本地文件列表出来 void CFtpDlg:ListLocFile()m_ctrlLocalFile.DeleteAllItems()

33、。int ix = m_ctrlLocal.FindString(0,m_strLocPath)。if (ix = CB_ERR) int iy = m_ctrlLocal.GetCount() 。m_ctrlLocal.SetCurSel(m_ctrlLocal.AddString(m_strLocPath)elsem_ctrlLocal.SetCurSel(m_ctrlLocal.SetCurSel(ix)。int k = 0。m_ctrlLocalFile.InsertItem(0,".上层目录 ") 。char * lpPath = (LPSTR)(LPCTSTR)

34、m_strLocPath 。char szFind300 。WIN32_FIND_DATA FindFileData 。strcpy(szFind,lpPath) 。strcat(szFind,"*.*")。HANDLE hFind=:FindFirstFile(szFind,&FindFileData)。while(TRUE)if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) CString str = FindFileData.cFileName 。if (str != '.&

35、#39; && str != ".") LVITEM lvitem 。lvitem.mask = LVIF_IMAGE|LVIF_TEXT 。lvitem.iItem = k+1。lvitem.pszText = (LPSTR)(LPCTSTR)str 。lvitem.iImage = 0。lvitem.iSubItem =0。m_ctrlLocalFile.InsertItem(&lvitem)。m_ctrlLocalFile.SetItemText(k+1,1,"文件夹") 。+k。 else/ 文件LVITEM lvitem

36、 。lvitem.mask = LVIF_IMAGE|LVIF_TEXT 。lvitem.iItem = k+1。lvitem.pszText = FindFileData.cFileName 。lvitem.iImage = 1。lvitem.iSubItem = 0。m_ctrlLocalFile.InsertItem(&lvitem)。m_ctrlLocalFile.SetItemText(k+1,1,"文件") 。+k。if(!FindNextFile(hFind,&FindFileData)break。FindClose(hFind) 。/ 选择了

37、本地文件的组合框中的不同工程void CFtpDlg:OnSelchangeComboboxexLocal()m_ctrlLocal.SetCurSel(m_ctrlLocal.GetCurSel()。m_ctrlLocal.GetWindowText(m_strLocPath) 。m_ctrlLocal.ResetContent() 。/ 添加硬盘盘符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL)TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T(" &

38、quot;)GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings)size_t szDriveString=:strlen(pDriveStrings)。while(szDriveString>0) m_ctrlLocal.AddString(pDriveStrings) 。pDriveStrings+=szDriveString+1 。szDriveString=:strlen(pDriveStrings)。ListLocFile() 。/ 点击了 ASCII 单选按钮void CFtpDlg:OnAscii()bBinary1

39、= 0 。/ 点击了二进制单选按钮void CFtpDlg:OnBinary() bBinary1 = 1 。 / 使用二进制/ 自动选择二进制或ASCII 单选按钮void CFtpDlg:OnAuto() bBinary1 = 2 。 / 自动/ 主动方式单选按钮void CFtpDlg:OnActive()bPassive1 = 0 。/ 被动方式单选按钮void CFtpDlg:OnPassive()bPassive1 = 1 。/ 上传void CFtpDlg:OnBtnup()POSITION p=m_ctrlLocalFile.GetFirstSelectedItemPositi

40、on()。if (p = NULL) return 。/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlLocalFile.GetNextSelectedItem(p)。/ 获得选中的内容/ 得到第 index 行. 第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlLocalFile.GetItemText(index,0)。CString SecondColumn = m_ctrlLocalFile.GetItemText(index,1)。if (SecondColumn=" 文件夹 ") CTi

41、me CurrentTime=CTime:GetCurrentTime() 。CString strTime 。strTime.Format("%d/%d/%d %d:%d:%d",CurrentTime.GetYear(),CurrentTime.GetMonth(),CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(),CurrentTime.GetSecond() 。strTime += " 暂不支持上传文件夹!rn"。int nLength = m_ediMessag

42、e.SendMessage(WM_GETTEXTLENGTH) 。m_ediMessage.SetSel(nLength, nLength)。m_ediMessage.ReplaceSel(strTime)。return 。else if (SecondColumn=" 文件 ")/ 点到的是文件,进行上传if (cFtpOpr.ReStatus()=2) cFtpOpr.PutFtpFile(m_strLocPath + FirstColumn,FirstColumn)UpdateServerFile()。 / 更新服务器的文件显示 / 下载 void CFtpDlg:O

43、nBtndown() / TODO: Add your control notification handler code herePOSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition()。if (p = NULL) return 。/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p)。/ 获得选中的内容/ 得到第 index 行. 第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlServerFil

44、e.GetItemText(index,0)。CString SecondColumn = m_ctrlServerFile.GetItemText(index,1)。if (SecondColumn=" 文件夹 ") CTime CurrentTime=CTime:GetCurrentTime() 。CString strTime 。strTime.Format("%d/%d/%d %d:%d:%d ",CurrentTime.GetYear(),CurrentTime.GetMonth(),CurrentTime.GetDay(),CurrentTi

45、me.GetHour(),CurrentTime.GetMinute(),CurrentTime.GetSecond() 。strTime += " 暂不支持下载文件夹!rn"。int nLength = m_ediMessage.SendMessage(WM_GETTEXTLENGTH) 。 m_ediMessage.SetSel(nLength, nLength)。m_ediMessage.ReplaceSel(strTime)。return 。 else if (SecondColumn=" 文件 ") / 点到的是文件,进行下载if (cFtpO

46、pr.ReStatus()=2)/ 点到的是文件,进行下载cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath) ListLocFile() 。 / 下载完成后更新本地文件显示/ 删除服务器文件或文件夹void CFtpDlg:OnBtndel()POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition() if (p = NULL) return 。/ 获取刚选取的位置的下标( 从 0 开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p)/ 获

47、得选中的内容/ 得到第 index 行. 第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlServerFile.GetItemText(index,0)CString SecondColumn = m_ctrlServerFile.GetItemText(index,1) if (SecondColumn=" 文件夹 ") if (cFtpOpr.ReStatus()=2)/ 移除文件夹cFtpOpr.DeleteFTPf(FirstColumn,0) 。 UpdateServerFile() 。 / 更新服务器的文件显示return

48、 。 else if (SecondColumn=" 文件 ")if (cFtpOpr.ReStatus()=2)/ 移除文件cFtpOpr.DeleteFTPf(FirstColumn,1) 。 UpdateServerFile() 。 / 更新服务器的文件显示void CFtpDlg:UpdateServerFile()/更新服务器的文件显示/ 获得目录CStringArray localName 。int nFileNumber=0 。nFileNumber=cFtpOpr.GetMultipleFileName(&localName) 。m_ctrlServ

49、erFile.DeleteAllItems() 。m_ctrlServerFile.InsertItem(0,".上层目录 ") 。for(int test=0 。 test<nFileNumber 。 test+) CString stTemp = localName.GetAt(test) 。if (stTemp.Right(5) = "<DIR>") / 文件夹LVITEM lvitem 。CString str = stTemp.Left(stTemp.GetLength() - 5)。lvitem.mask = LVIF_IM

50、AGE|LVIF_TEXT 。lvitem.iItem =test+1 。lvitem.pszText = (LPSTR)(LPCTSTR)str 。lvitem.iImage = 0。lvitem.iSubItem =0。m_ctrlServerFile.InsertItem(&lvitem)。m_ctrlServerFile.SetItemText(test+1,1,"文件夹 ") 。 else / 文件LVITEM lvitem 。lvitem.mask = LVIF_IMAGE|LVIF_TEXT 。lvitem.iItem =test+1 。lvitem.

51、pszText = (LPSTR)(LPCTSTR)stTemp 。lvitem.iImage = 1。lvitem.iSubItem =0。m_ctrlServerFile.InsertItem(&lvitem)。m_ctrlServerFile.SetItemText(test+1,1,"文件 ") 。void CFtpDlg:OnBtnhelp()CAboutDlg dlg 。dlg.DoModal() 。/ 用于屏蔽按下回车键程序退出的问题BOOL CFtpDlg:PreTranslateMessage(MSG* pMsg)if( pMsg->mess

52、age =WM_KEYDOWN && pMsg->wParam=VK_RETURN ) return truereturn CDialog:PreTranslateMessage(pMsg) / 复选框,是否匿名void CFtpDlg:OnChkanonymous() if (m_chkAnony.GetCheck()/ 被选上bAnony = 1 。 / 使用匿名/ 记录FTP登陆用户名,。/ 记录FTP登陆用户密码,/ 恢复。 / 恢复m_editName.GetWindowText(m_strName) 。用于不使用匿名后恢复m_editPassword.GetW

53、indowText(m_strPassword) 用于不使用匿名后恢复m_editName.SetWindowText("anonymous") 。m_editPassword.SetWindowText("") 。m_editName.EnableWindow(FALSE) 。m_editPassword.EnableWindow(FALSE) 。elsebAnony = 0 。 / 不使用匿名m_editName.SetWindowText(m_strName) 。m_editPassword.SetWindowText(m_strPassword)

54、 m_editName.EnableWindow(TRUE) 。m_editPassword.EnableWindow(TRUE) 。( 2) CFtpOperate 的一些函数定义/ 构造函数CFtpOperate:CFtpOperate()strAppName.LoadString(AFX_IDS_APP_TITLE) 。 / 获得应用程序的名字pInternetSession = newCInternetSession(strAppName,INTERNET_OPEN_TYPE_PRECONFIG)。pEdiMes = NULL 。if(!pInternetSession)AfxMess

55、ageBox(" 初始化会话失败!") 。flag = -1。 / 初始化失败设为 -1return 。flag =0 。 / 初始化成功,标志初始化为 0/ 析构函数CFtpOperate:CFtpOperate()pInternetSession->Close() 。if(pInternetSession != NULL)delete pInternetSession 。/ 设置,由外部调用,把数据传进来bool CFtpOperate:set(CString FullURL,CString UserName,CString Password) if (flag = -1) / 类实例初始化时失败/ 重新设定strAppName.LoadString(AFX_IDS_APP_TITLE) 。 / 获得应用程序的名字pInternetSession = newCInternetSession(strAppName,INTERNET_OPEN_TYPE_PRECONFIG)。if(!pInternetSession)AfxMessageBox(" 初始化会话失败!") 。flag = -1。 / 初始化失败设为 -1return 0 。flag =0 。/ flag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论