📄 ftpclient.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 + -