看流星社区

 找回密码
 注册账号
查看: 3343|回复: 4

在VC中实现FTP上传文件功能

[复制链接]

该用户从未签到

发表于 2011-10-2 16:08:34 | 显示全部楼层 |阅读模式
要联接到FTP服务器,需要两个步骤,首先必须创建一个CInternetSession对象,用类CInterSession创建并初始化一个或几个同时存在的Internet会话(session),并描述与代理服务器的连接(如果有必要的话),如果在程序运行期间需要保持与Internet的连接,可以创建一个CInternetSession对象作为类CWinApp的成员。
---- MFC中的类CFtpConnection管理我们与Internet服务器的连接,并直接操作服务器上的目录和文件,FTP是MFC的WinInet支持的三个Internet功能之一,我们需要先创建一个CInternetSession实例和一个CFtpConnection对象就可以实现和一个FTP服务器的通信,我们不需要直接创建CFtpConnection对象,而是通过调用CInternetSession::GetFtpConnection来完成这项工作。它创建CFtpConnection对象并返回一个指向该对象的指针。
Ftp连接类的信息
---- 下面我们简要介绍连接类的信息
游客,如果您要查看本帖隐藏内容请回复
---- 建立连接到ftp.microsoft.com的程序,它是一个单文档程序。并且连接由视图类的构造函数完成。
1.     建立单文档程序ftp
2.     在ftpview.h中加入包含#include < afxinet.h >
3.     在ftpview.h中添加如下的成员变量
4.     public:
5.     CInternetSession *m_pInetSession;
6.     CFtpConnection *m_pFtpConnection;
7.     在ftpview.cpp中的ftpview构造函数中加入下面的代码
8.     CFtpView::CFtpView()
9.     {
10.     m_pInetSession=new CInternetSession
11.     (AfxGetAppName(),1,
12.     PRE_CONFIG_INTERNET_ACCESS);
13.     try
14.     {
15.     m_pFtpConnection=m_pInetSession->
16.     GetFtpConnection("FTP.MICROSOFT.COM");
17.     }
18.     catch(CInternetException *pEx)
19.     {
20.     TCHAR szError[1024];
21.     if(pEx->GetErrorMessage(szError,1024))
22.     AfxMessageBox(szError);
23.     else
24.     AfxMessageBox("There was an exception");
25.           pEx->Delete();
26.           m_pFtpConnection=NULL;
27.       }
28.     }
29.     在ftpview.cpp中的ftpview析构函数中加入下面的代码
30.       CFtpView::~CFtpView()
31.       {
32.         if(m_pFtpConnection!=NULL)
33.         {
34.       m_pFtpConnection->Close();
35.       delete m_pFtpConnection;
36.         }
37.         delete m_pInetSession;
38.       }
39.     编译并且执行程序,如果连接出现问题,将会在一个消息框中报告出错消息。
发送文件到FTP文件服务器
---- 创建一个发送文件到FTP文件服务器的程序
40.     建立单文档程序ftpfw, 在ftpfwview.h中加入包含 #include < afxinet.h >
41.     在ftpfwview.h中添加如下的成员变量
42.     public:     
43.       bool m_bConnectionAttempted;
44.         int m_nFileStatus;
45.     在ftpview.cpp中的ftpview构造函数中加入下面的代码
46.     CFtpfwView::CFtpfwView()
47.     {   
48.         m_bConnectionAttempted=false;
49.     }
50.     使用ClassWizard加入新的类CFtpThread,该类派生于CWinThread 在ftpthread.h中加入如下变量
51.     public:
52.         static UINT PutFile(LPVOID Status);
53.     添加新类成员函数代码
54.     UINT CFtpThread::PutFile(LPVOID Status)
55.       {
56.     int *pnFileStatus;
57.     CInternetSession *pInetSession;
58.     CFtpConnection *pFtpConnection=NULL;
59.     pnFileStatus=(int *)Status;
60.     *pnFileStatus=0;
61.     pInetSession=new
62.     CInternetSession(AfxGetAppName(),1,
63.     PRE_CONFIG_INTERNET_ACCESS);
64.     try
65.     {
66.     pFtpConnection=pInetSession->
67.     GetFtpConnection("192.34.45.0");
68.         }
69.     catch(CInternetException *pEx)
70.         {
71.     pEx->Delete();
72.     pFtpConnection=NULL;
73.     *pnFileStatus=-1;
74.     goto BallOut;
75.         }
76.         *pnFileStatus =1;
77.     pFtpConnection->Remove("test.txt");
78.     if(!pFtpConnection->PutFile
79.     ("test.txt","test.txt"))
80.     *pnFileStatus=-2;
81.         else
82.     *pnFileStatus=2;
83.       BallOut:
84.     if(pFtpConnection!=NULL)
85.         {
86.     pFtpConnection->Close();
87.     delete pFtpConnection;
88.         }
89.         delete pInetSession;
90.         AfxEndThread(0);
91.         return false;
92.       }
93.     编辑ftpfwview.cpp中的OnDraw()函数
94.       void CFtpfwView::OnDraw(CDC* pDC)
95.       {
96.         CFtpfwDoc* pDoc = GetDocument();
97.         ASSERT_VALID(pDoc);
98.         if(!m_bConnectAttempted)
99.         {
100.     m_bConnectAttempted=TRUE;
101.     AfxBeginThread((AFX_THREADPROC)
102.     CFtpThread::PutFile,&m_nFileStatus);
103.         }
104.       }
105.     编译并且执行程序,在连接和传输的过程中,应用程序仍然可以作自己的工作,这是因为传输的过程发生在线程中。
总结语
---- 通过以上的程序我们可以明白FTP的工作原理,我们可以编制自己的获得FTP服务器的文件以及获得FTP服务器的根目录,亲自体验一下我们的程序工作的怎末样。

该用户从未签到

发表于 2019-3-28 14:37:44 | 显示全部楼层
支持楼主,支持看流星社区,以后我会经常来!

该用户从未签到

发表于 2019-3-28 15:57:03 | 显示全部楼层
支持楼主,支持看流星社区,以后我会经常来!

该用户从未签到

发表于 2019-3-28 17:17:04 | 显示全部楼层
支持楼主,支持看流星社区,以后我会经常来!

该用户从未签到

发表于 2019-12-15 14:38:50 | 显示全部楼层
wedfadasdadadadawd
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-18 23:36

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表