69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h>
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
TCHAR szFtpUrl[] = _T("ftp://ftp.info-zip.org/pub/infozip");
TCHAR szUserAgent[] = _T("Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");
int main(int argc, char *argv[])
{
TCHAR szHostName[INTERNET_MAX_HOST_NAME_LENGTH] = { 0 };
TCHAR szPathPart[INTERNET_MAX_PATH_LENGTH] = { 0 };
TCHAR szUserName[INTERNET_MAX_USER_NAME_LENGTH] = { 0 };
TCHAR szPassword[INTERNET_MAX_PASSWORD_LENGTH] = { 0 };
URL_COMPONENTS uc = { 0 };
uc.dwStructSize = sizeof(URL_COMPONENTS);
uc.lpszScheme = NULL;
uc.dwSchemeLength = 0;
uc.nScheme = INTERNET_SCHEME_DEFAULT;
uc.lpszHostName = szHostName;
uc.dwHostNameLength = ARRAYSIZE(szHostName);
uc.nPort = 0;
uc.lpszUserName = szUserName;
uc.dwUserNameLength = ARRAYSIZE(szUserName);
uc.lpszPassword = szPassword;
uc.dwPasswordLength = ARRAYSIZE(szPassword);
uc.lpszUrlPath = szPathPart;
uc.dwUrlPathLength = ARRAYSIZE(szPathPart);
uc.lpszExtraInfo = NULL;
uc.dwExtraInfoLength= 0;
if (InternetCrackUrl(szFtpUrl, 0, 0, &uc) && (uc.nScheme == INTERNET_SCHEME_FTP))
{
HINTERNET hSession = InternetOpen(szUserAgent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hSession != NULL)
{
HINTERNET hConnect = InternetConnect(hSession, szHostName, uc.nPort, szUserName, szPassword, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if (hConnect == NULL)
{
hConnect = InternetConnect(hSession, szHostName, uc.nPort, szUserName, szPassword, INTERNET_SERVICE_FTP, 0, 0);
}
if (hConnect != NULL)
{
if (FtpSetCurrentDirectory(hConnect, szPathPart))
{
WIN32_FIND_DATA wfd = { 0 };
HINTERNET hFindFile = FtpFindFirstFile(hConnect, NULL, &wfd, INTERNET_FLAG_RELOAD, 0);
if (hFindFile != NULL)
{
do {
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
_tprintf(_T("%s/\n"), wfd.cFileName);
}
else
{
_tprintf(_T("%s\n"), wfd.cFileName);
}
} while (InternetFindNextFile(hFindFile, (LPVOID)&wfd));
InternetCloseHandle(hFindFile);
}
}
InternetCloseHandle(hConnect);
}
InternetCloseHandle(hSession);
}
}
return 0;
}
由于这个 FTP 网站速度慢,所以可能要等几秒钟。
因为我暂时找不到快速的 FTP 来的测试,现在 FTP 服务器太少了。