#include <stdio.h>
#include <windows.h>
#include <wininet.h>
#include <process.h>
#pragma comment(lib, "WININET.LIB")
int main()
{
BOOL bSuccess;
HINTERNET hIntSession;
HINTERNET hFtpSession;
//HINTERNET hFind;
//char szBuffer[64];
//WIN32_FIND_DATA findData;
char szAppName[] = "mydll";
char szServer[] = "192.168.101.225";
char szUser[] = "qpid";
char szPwd[] = "qpid";
char szDirectory[] = "/home/qpid/mydll";
char szFile[] = "mylib.dll";
char szCurDir[MAX_PATH];
char szNewFile[] = "c:\\mylib.dll";
DWORD dwCurDir = MAX_PATH;
printf("try to open intSession...\n");
hIntSession = InternetOpen(szAppName, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(hIntSession == NULL)
{
printf("can not open intSession!\n");
return -1;
}
printf("intSession is open!\n");
printf("try to open ftpSession...\n");
hFtpSession = InternetConnect(hIntSession, szServer, INTERNET_DEFAULT_FTP_PORT, szUser, szPwd, INTERNET_SERVICE_FTP, 0, 0);
if(hFtpSession == NULL)
{
InternetCloseHandle(hIntSession);
printf("can not open ftpSession!\n");
return -1;
}
printf("ftpSession is open!\n");
ZeroMemory(szCurDir, sizeof(szCurDir));
FtpGetCurrentDirectory(hFtpSession, szCurDir, &dwCurDir);
printf("current dir is %s .\n", szCurDir);
printf("try to set current directory...\n");
bSuccess = FtpSetCurrentDirectory(hFtpSession, szDirectory);
if(!bSuccess)
{
InternetCloseHandle(hFtpSession);
InternetCloseHandle(hIntSession);
printf("can not set directory!\n");
return -1;
}
printf("set directory ok!\n");
printf("try to get file...\n");
FtpGetFile(hFtpSession, szFile, szNewFile, TRUE, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);
//InternetCloseHandle(hFind);
InternetCloseHandle(hFtpSession);
InternetCloseHandle(hIntSession);
return 0;
}
//伪代码
void DeleteFtpDiretoryFile(string path)
{
if (path is file)//文件直接删除
{
m_ftpAdapter.DeleteFileName(path);
return;
}
//path为文件夹,获取文件夹下的文件列表
List<string> listFileName = new List<string>();
GetFileList(listFileName);
if (listFileName.Count < 1)
{
//该文件夹为空文件夹,直接删除
m_ftpAdapter.delDir(path);
return;
}
//遍历path文件夹
foreach (string strFileName in listFileName)
{
string strChildFilePaht = path +'/' + strFileName;
if (IsDiretory(strChildFilePaht))//子文件夹递归处理
{
DeleteFtpDiretoryFile(strChildFilePaht);
}
else
{
//文件直接删除
m_ftpAdapter.DeleteFileName(strChildFilePaht);
}
}
//path文件夹下东西都删除了,删除空文件夹
m_ftpAdapter.delDir(path);
}
//伪代码
void DownLoadFtpDiretoryFile(string ftpPath, string LocalPath)
{
if (ftpPath is file)//文件直接下载
{
m_ftpAdapter.Download(ftpPath, LocalPath);
return;
}
else
{
if (Directory.IsExists(LocalPath))//服务器文件夹,先确认本地文件夹是否存在
{
Directory.CreateDirectory(LocalPath);
};
}
List<string> listFileName = new List<string>();
m_ftpAdapter.GetFileList(listFileName);
//遍历ftpPath下的文件
foreach (string strFileName in listFileName)
{
if (IsDiretory(strFileName ))//是文件夹就递归
{
DownLoadFtpDiretoryFile(strFtpChildFilePaht, strLocalChildFilePaht);
}
else
{
//是文件,直接下载
m_ftpAdapter.Download(strFtpChildFilePaht, strLocalChildFilePaht);
}
}
}