⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpclient.cpp

📁 FTP上传工具,FTP上传的小例子,包括定制时间上传功能
💻 CPP
字号:
// FtpClient.cpp: implementation of the CFtpClient class.
//
//////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "FtpClient.h"
#include <string.h>

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

CFtpClient::CFtpClient()
{

}

CFtpClient::~CFtpClient()
{

}
//  --------------------------------------------------------------------
//  Function: ftpConnect, 连接ftp服务器
//  Return value: 无
//  Parameters: [IN]
//      server  :  服务器名或者地址
//      user    :  用户名
//      passwd  :  密码
//  Remark: 无
//  --------------------------------------------------------------------
HANDLE CFtpClient::ftpConnect(const char * server, const char * user, const char * passwd)
{
    HANDLE m_hInetSession = InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (! m_hInetSession) return NULL;

    HANDLE hConnection = InternetConnect(
        m_hInetSession,
        server,
       INTERNET_DEFAULT_FTP_PORT,
        user,
        passwd,
        INTERNET_SERVICE_FTP,
        INTERNET_FLAG_PASSIVE,
		0
    );

    return hConnection;
}

//  --------------------------------------------------------------------
//  Function: ftpGetFile, 从ftp服务器上下载文件
//  Return value: 无
//  Parameters: [IN]
//      hConnection :  ftp连接句柄(由ftpConnect返回)
//      remoteName  :  远程文件名(源文件)
//      localName   :  本地文件名(目标文件)
//  Remark: 无
//  --------------------------------------------------------------------
bool CFtpClient::ftpGetFile(HANDLE hConnection, const char * remoteName, char * localName)
{
	if(localName==NULL||remoteName==NULL) return false;
    HANDLE hFtpFile = FtpOpenFile(
        hConnection,
        remoteName,
        GENERIC_READ,
        FTP_TRANSFER_TYPE_BINARY |
        INTERNET_FLAG_RELOAD     |
        INTERNET_FLAG_DONT_CACHE,
        0
    );
    if (hFtpFile == NULL) return false;

	if(strlen(localName)==0)
		strcpy(localName,remoteName);
    HANDLE hLocal = CreateFile(
        localName,
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ,
        NULL,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL
    );
    if (hLocal == NULL) return false;

    const int size = 0xFFFF;
    ULONG nRead, nWritten;
    byte buffer[size];

    while (InternetReadFile(hFtpFile, buffer, size, &nRead)) {
        if (nRead == 0) break;
        WriteFile(hLocal, buffer, nRead, &nWritten, NULL);
    }
    CloseHandle(hLocal);
    InternetCloseHandle(hFtpFile);

    return true;
}

//  --------------------------------------------------------------------
//  Function: ftpPutFile, 往ftp服务器上传文件
//  Return value: 无
//  Parameters: [IN]
//      hConnection :  ftp连接句柄(由ftpConnect返回)
//      remoteName  :  远程文件名(目标文件)
//      localName   :  本地文件名(源文件)
//  Remark: 无
//  --------------------------------------------------------------------
bool CFtpClient::ftpPutFile(HANDLE hConnection, const char * remoteName, char * localName)
{
	if(localName==NULL||remoteName==NULL) return false;
    HANDLE hFtpFile = FtpOpenFile(
        hConnection,
        remoteName,
        GENERIC_WRITE,
        FTP_TRANSFER_TYPE_BINARY |
        INTERNET_FLAG_RELOAD     |
        INTERNET_FLAG_DONT_CACHE,
        0
    );
    if (hFtpFile == NULL) return false;

 	if(strlen(localName)==0)
		strcpy(localName,remoteName);
	HANDLE hLocal = CreateFile(
        localName,
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        NULL
    );
    if (hLocal == NULL) return false;

    const int size = 0xFFFF;
    ULONG nRead, nWritten;
    byte buffer[size];

    while (ReadFile(hLocal, buffer, size, & nRead, NULL)) {
        if (nRead == 0) break;
        InternetWriteFile(hFtpFile, buffer, nRead, & nWritten);
    }
    CloseHandle(hLocal);
    InternetCloseHandle(hFtpFile);

    return true;
}

//  --------------------------------------------------------------------
//  Function: getFtpFileInfo, 获取ftp服务器上的文件信息
//  Return value: 无
//  Parameters: [IN] filename:指定文件 [OUT] info:文件信息
//  Remark: 无
//  --------------------------------------------------------------------
bool CFtpClient::getFtpFileInfo(HANDLE hConnection, const char * filename, WIN32_FIND_DATA &info)
{
    HANDLE hFind = NULL;

    hFind = ::FtpFindFirstFile(hConnection, (LPCSTR)filename, &info, INTERNET_FLAG_DONT_CACHE, 0);
    if (hFind == NULL) {
        //trace("[Error] Get FtpFileInfo : %s\n", ErrorMsg);
		//Beep(1000,1000);
        return false;
    }

    InternetCloseHandle(hFind);
    return true;
}

bool CFtpClient::ftpSetCurrentDirectory(HINTERNET hConnect, LPCTSTR lpszDirectory)
{
    BOOL bFind = FtpSetCurrentDirectory(hConnect,lpszDirectory);
    if (!bFind) {
        //trace("[Error] Get FtpFileInfo : %s\n", ErrorMsg);
		Beep(1000,1000);
        return false;
    }
	return true;
}

bool CFtpClient::ftpGetCurrentDirectory(HINTERNET hConnect, LPTSTR lpszDirectory, LPDWORD lpdwCurrentDirectory)
{
	BOOL bFind = FtpGetCurrentDirectory(hConnect ,lpszDirectory ,lpdwCurrentDirectory);
    if (!bFind) {
        //trace("[Error] Get FtpFileInfo : %s\n", ErrorMsg);
		Beep(1000,1000);
        return false;
    }
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -