INTERNET編程之FTP的封裝

今天,我們就看看,我們在實際應用中如何封裝我們的FTP吧.我在這裏就只貼出代碼了.

我們的FTP類是CTaskFtp:

頭文件:

 // CTaskFtp.h: interface for the CCTaskFtp class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CTaskFtp_H__DFFC12FF_CE6C_479B_90F5_88814610EE17__INCLUDED_)
#define AFX_CTaskFtp_H__DFFC12FF_CE6C_479B_90F5_88814610EE17__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <afxinet.h>

class CTaskFtp : public CObject 
{
public:
 CTaskFtp();
 virtual ~CTaskFtp();

 BOOL OpenFtpConnection(LPCTSTR strServer ,LPCTSTR strUserName = NULL,LPCTSTR strPassword = NULL);
 void CloseFtpConnection();

 BOOL Download(CString strLocalFile,CString strRemoteFile );
 
 BOOL Upload(CString strLocalFile,CString strRemoteFile );

 BOOL FindFile(CString strRemoteFile);
 BOOL FindNextFile();
 CString GetFileName();
 CString GetFilePath();
 CString GetFileTitle();
 CString GetFileURL();
 BOOL IsArchived();
 BOOL IsCompressed();
 BOOL IsDirectory();
 BOOL IsDots();
 BOOL IsHidden();
 BOOL IsNormal();
 BOOL IsReadOnly();
 BOOL IsSystem();
 BOOL IsTemporary();

 BOOL RemoveFile(CString strRemoteFile);
 BOOL RemoveAllFiles(CString strRemoteDirectory);
 
private:

 CInternetSession * m_pSession; //Internet Session
 CFtpConnection * m_pConnection; //Ftp Connection
 CFtpFileFind * m_pFileFind;  //filefinder
 
 CString m_strServerName; //服務器地址
 CString m_strUserName;  //用戶名
 CString m_strPassword;  //用戶密碼 
 BOOL m_bNeedRight;   //判斷是否需要用戶權限(默認不要)
};

#endif // !defined(AFX_CTaskFtp_H__DFFC12FF_CE6C_479B_90F5_88814610EE17__INCLUDED_)

實現文件:

#include "TaskFtp.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTaskFtp::CTaskFtp()
{
 m_pSession = NULL;
 m_pConnection = NULL;
 m_pFileFind = NULL;
 m_strServerName = "";
 m_strUserName = "";
 m_strPassword = "";
 m_bNeedRight = FALSE;

 m_pSession = new CInternetSession();
}

CTaskFtp::~CTaskFtp()
{
 if ( m_pSession )
 {
  CloseFtpConnection();
  m_pSession->Close();
  delete m_pSession;
 }
 m_pSession = NULL;
}

BOOL CTaskFtp::OpenFtpConnection(LPCTSTR strServer ,LPCTSTR strUserName /* = NULL */,LPCTSTR strPassword /* = NULL */)
{
 if( m_pSession == NULL )
 {
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤","沒有建立會話",(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  return FALSE;
 }
 
 //關閉FTP連接
 CloseFtpConnection();

 if( strUserName == NULL )
  m_bNeedRight = FALSE;
 else
  m_bNeedRight = TRUE;

 m_strServerName = strServer;
 m_strUserName = strUserName;
 m_strPassword = strPassword;

 try
 {
  if( m_bNeedRight )
   m_pConnection = m_pSession->GetFtpConnection(m_strServerName,m_strUserName,m_strPassword);
  else
   m_pConnection = m_pSession->GetFtpConnection(m_strServerName);
 }
 catch (CInternetException *pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
 return TRUE;
}

void CTaskFtp::CloseFtpConnection()

 if ( m_pConnection )
 {
  if ( m_pFileFind )
  {
   m_pFileFind->Close();
   delete m_pFileFind;
  }
  m_pConnection->Close();
  delete m_pConnection;
 }
 m_pConnection = NULL;
 m_pFileFind = NULL;

 m_strServerName = "";
 m_strUserName = "";
 m_strPassword = "";
}

BOOL CTaskFtp::Download(CString strLocalFile,CString strRemoteFile )
{
 if( !m_pConnection )
 {
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤","沒有建立FTP連接",(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  return FALSE;
 }
 try
 {
  m_pConnection->GetFile(strRemoteFile,strLocalFile);
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
 return TRUE;
}

BOOL CTaskFtp::Upload( CString strLocalFile,CString strRemoteFile )
{
 if( !m_pConnection )
 {
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤","沒有建立FTP連接",(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  return FALSE;
 }
 try
 {
  return m_pConnection->PutFile(strLocalFile,strRemoteFile);
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
 return TRUE;
}

BOOL CTaskFtp::FindFile(CString strRemoteFile)
{
 if( !m_pConnection )
 {
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤","沒有建立FTP連接",(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  return FALSE;
 }
 try
 {
  if ( m_pFileFind )
  {
   m_pFileFind->Close();
   delete m_pFileFind;
   m_pFileFind = NULL;
  }
  m_pFileFind = new CFtpFileFind(m_pConnection);
  return m_pFileFind->FindFile(strRemoteFile);
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}

BOOL CTaskFtp::FindNextFile()
{
 VERIFY( m_pFileFind );

 try
 {
  return m_pFileFind->FindNextFile();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}

CString CTaskFtp::GetFileName()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->GetFileName();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return "";
 }
}
CString CTaskFtp::GetFilePath()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->GetFilePath();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return "";
 }
}
CString CTaskFtp::GetFileTitle()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->GetFileTitle();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return "";
 }
}
CString CTaskFtp::GetFileURL()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->GetFileURL();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return "";
 }
}
BOOL CTaskFtp::IsArchived()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsArchived();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}
BOOL CTaskFtp::IsCompressed()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsCompressed();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}
BOOL CTaskFtp::IsDirectory()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsDirectory();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}
BOOL CTaskFtp::IsDots()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsDots();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}
BOOL CTaskFtp::IsHidden()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsHidden();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}
BOOL CTaskFtp::IsNormal()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsNormal();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}
BOOL CTaskFtp::IsReadOnly()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsReadOnly();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}
BOOL CTaskFtp::IsSystem()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsSystem();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}
BOOL CTaskFtp::IsTemporary()
{
 VERIFY( m_pFileFind );
 
 try
 {
  return m_pFileFind->IsTemporary();
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}

BOOL CTaskFtp::RemoveFile(CString strRemoteFile)
{
 if( !m_pConnection )
 {
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤","沒有建立FTP連接",(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  return FALSE;
 }

 try
 {
  return m_pConnection->Remove(strRemoteFile);
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
}

BOOL CTaskFtp::RemoveAllFiles(CString strRemoteDirectory)
{
 if( !m_pConnection )
 {
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤","沒有建立FTP連接",(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  return FALSE;
 }
 try
 {
  BOOL bWork = FindFile(strRemoteDirectory + "//*.*");
  while(bWork)
  {
   bWork = FindNextFile();
   if( IsDirectory() || IsDots() || IsHidden() || IsSystem() )
    continue;
   else
   {
    RemoveFile(GetFilePath());
   }
  }
 }
 catch (CInternetException* pEx)
 {
  TCHAR szErr[1024];
  pEx->GetErrorMessage(szErr, 1024);
  LOG_REPORT(g_LogFile,"/t%s , %s , %s/t/n",
   "錯誤",szErr,(CTime::GetCurrentTime()).Format("%Y-%m-%d %H:%M:%S"));
  pEx->Delete();
  return FALSE;
 }
 return TRUE;
}

當然了,在實際應用中還是有必要做部分修改的.比如加上異常處理等等.

不過,你也可以直接用的.呵呵

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