MFC 與FTP之間的交互

.h文件
#pragma once  

#include <afxinet.h>  
#include <vector>  

#define FTP_DEFAULT_PORT 21  

struct FileProperty  
{  
	CString strFileName;  
	// FILE_ATTRIBUTE_DIRECTORY   
	// GetFileAttributes  
	DWORD dwFileType;  
};  

class CYWFtpSession  
{  
public:  
	CYWFtpSession(void);  
	~CYWFtpSession(void);  

	// 設置FTP服務器地址、端口  
	void SetServerParam(CString strServerAddr, INTERNET_PORT wServerPort);  
	// 設置登錄名和密碼  
	void SetUserInfo(CString strUserName, CString strPassWord, BOOL bInitiativeMode = FALSE);  
	// 連接到指定FTP服務器  
	BOOL ConnectToServer();  
	// 得到指定目錄下的所有文件  
	void GetFileList(CString strDirPath, std::vector<FileProperty> &vctFileList);  
	// 上傳一個文件到FTP服務器  
	BOOL PutFileToServer(CString strLocalFile, CString strPutPath);  
	// 從FTP服務器下載一個文件  
	BOOL GetFileFromServer(CString strRemoteFile, CString strLocalPath, BOOL bFailIfExists = FALSE);  
	// 關閉連接  
	void CloseConnection();  

	// 檢測對象是否存在  
	BOOL IsConnectionActive();  

	// 獲取最後一個錯誤信息  
	CString GetLastErrorMessage();  

private:  
	// FTP服務器地址  
	CString m_strServerAddr;  
	// 服務端口  
	INTERNET_PORT m_wServerPort;  
	// 登錄用戶名  
	CString m_strUserName;  
	// 登錄密碼  
	CString m_strPassWord;  
	// 被動模式-FALSE  主動模式-TRUE  
	BOOL m_bInitiativeMode;  
	// 記錄最後一個錯誤信息  
	CString m_strLastErrorMsg;  

	// 創建並初始化一個或多個同時的Internet 會話  
	CInternetSession m_cInetSession;  
	// 管理與Internet服務器的FTP連接並允許直接操縱服務器中的目錄和文件  
	CFtpConnection *m_pFtpConn;  
};  


.cpp 文件 

#include "StdAfx.h"  
#include "CMyFTPInteraction.h"  

CYWFtpSession::CYWFtpSession(void)  
{  
	m_pFtpConn = NULL;  
	m_strServerAddr.Empty();  
	m_wServerPort = FTP_DEFAULT_PORT;  
	m_strUserName.Empty();  
	m_strPassWord.Empty();  
	m_bInitiativeMode = FALSE;  
	m_strLastErrorMsg.Empty();  
}  

CYWFtpSession::~CYWFtpSession(void)  
{  
	CloseConnection();  
}  

// 設置FTP服務器地址、端口  
void CYWFtpSession::SetServerParam(CString strServerAddr, INTERNET_PORT wServerPort)  
{  
	m_strServerAddr = strServerAddr;  
	m_wServerPort = wServerPort;  
}  

// 設置登錄名和密碼  
void CYWFtpSession::SetUserInfo(CString strUserName, CString strPassWord, BOOL bInitiativeMode)  
{  
	m_strUserName = strUserName;  
	m_strPassWord = strPassWord;  
	m_bInitiativeMode = bInitiativeMode;  
}  

// 連接到指定FTP服務器  
BOOL CYWFtpSession::ConnectToServer()  
{  
	try  
	{  
		CloseConnection();  
		// m_bInitiativeMode = TRUE 爲被動模式  
		m_pFtpConn = m_cInetSession.GetFtpConnection(m_strServerAddr,   
			m_strUserName, m_strPassWord, m_wServerPort, m_bInitiativeMode);  
		if (NULL != m_pFtpConn)  
			return TRUE;  
	}  
	catch (CInternetException *e)  
	{  
		e->Delete();  
	}  
	return FALSE;  
}  

// 得到指定目錄下的所有文件  
void CYWFtpSession::GetFileList(CString strDirPath, std::vector<FileProperty> &vctFileList)  
{  
	if (NULL == m_pFtpConn  
		&& !ConnectToServer())  
		return ;  

	vctFileList.empty();  

	CFtpFileFind cFtpFileFind(m_pFtpConn);  
	// 查找指定目錄  
	BOOL bWorking = cFtpFileFind.FindFile(strDirPath);  
	while (bWorking)  
	{  
		bWorking = cFtpFileFind.FindNextFile();  
		// .或者..  
		if (cFtpFileFind.IsDots())  
			continue;  
		FileProperty sOneFile;  
		// 得到文件名  
		sOneFile.strFileName = cFtpFileFind.GetFileName();  
		sOneFile.dwFileType = 0;  
		// 文件夾  
		if (cFtpFileFind.IsDirectory())  
			sOneFile.dwFileType |= FILE_ATTRIBUTE_DIRECTORY;  
		else  
			sOneFile.dwFileType |= FILE_ATTRIBUTE_NORMAL;   // 普通文件  
		// 添加進文件列表  
		vctFileList.push_back(sOneFile);  
	}  
}  

// 上傳一個文件到FTP服務器  
BOOL CYWFtpSession::PutFileToServer(CString strLocalFile, CString strPutPath)  
{  
	if (NULL == m_pFtpConn  
		&& !ConnectToServer())  
		return FALSE;  

	return m_pFtpConn->PutFile(strLocalFile, strPutPath);  
}  

// 從FTP服務器下載一個文件  
BOOL CYWFtpSession::GetFileFromServer(CString strRemoteFile, CString strLocalPath, BOOL bFailIfExists)  
{  
	if (NULL == m_pFtpConn  
		&& !ConnectToServer())  
		return FALSE;  

	return m_pFtpConn->GetFile(strRemoteFile, strLocalPath, bFailIfExists);  
}  

// 關閉連接  
void CYWFtpSession::CloseConnection()  
{  
	if (NULL != m_pFtpConn)  
	{  
		m_pFtpConn->Close();  
		delete m_pFtpConn;  
	}  
	m_pFtpConn = NULL;  
}  

// 檢測對象是否存在  
BOOL CYWFtpSession::IsConnectionActive()  
{  
	if (NULL == m_pFtpConn)  
		return FALSE;  
	return TRUE;  
}  

// 獲取最後一個錯誤信息  
CString CYWFtpSession::GetLastErrorMessage()  
{  
	m_strLastErrorMsg.Format(_T("錯誤碼:%ld"), ::GetLastError());  
	return m_strLastErrorMsg;  
}  

用法示例

CYWFtpSession Ftp;
	Ftp.SetServerParam(_T("222.241.151.189"),FTP_DEFAULT_PORT);
	Ftp.SetUserInfo(_T("賬號"),_T("密碼"));
	if (!Ftp.PutFileToServer(_T("本地文件地址"),_T("/other/1.apk"))) // 後面的是服務器地址後面要添加上傳之後的文件名
	{
	AfxMessageBox(Ftp.GetLastErrorMessage());
	}
	Ftp.CloseConnection()



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章