#include <stdlib.h>
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
HINTERNET hIntSession,hFtpSession,filehandle;
char cholddir[256]; //保存根目录
char *FTPError(int error);
bool fileCompare(LPCSTR filename,WIN32_FIND_DATA &filedata);
int FTPDisconnet();
int FTPConnect(char *svr, unsigned int port, char *usr, char *pwd)
{
int error;
unsigned long llength = 256; //
hIntSession = InternetOpen ("FtpDown",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if (hIntSession == NULL)
{
InternetCloseHandle(hIntSession);
error = 1;
return error;
}
hFtpSession = InternetConnect (hIntSession,svr,port,usr,pwd,INTERNET_SERVICE_FTP,0,NULL);
if (hFtpSession == NULL)
{
InternetCloseHandle(hFtpSession);
error = 1;
return error;
}
FtpGetCurrentDirectory(hFtpSession,cholddir,&llength);
return 0;
}
int FTPFget(char *dst_fname, char *src_fname,unsigned int *size)
{
int error;
char *LocalName,*pos,buffer[256],*serdir,*serfile ;
WIN32_FIND_DATA filedata;
BOOL bSuccess;
strcpy (buffer,src_fname);
while (pos = strrchr(buffer,'/')) *pos = '\\';
if(pos = strrchr(buffer,'\\'))
{
*pos = 0;
serdir = buffer;
serfile =pos+1;
}
else
{
serfile = buffer;
serdir = buffer;
}
bSuccess = FtpSetCurrentDirectory(hFtpSession,cholddir); // 重新设置为根目录
if (!bSuccess) //
{
error = 2; //
return error; //
} // 错误判断
if (strcmp(serdir,serfile))
{
bSuccess = FtpSetCurrentDirectory(hFtpSession,serdir);
if (!bSuccess)
{
error = 2;
return error;
}
}
filehandle = FtpFindFirstFile(hFtpSession,serfile,&filedata,0,NULL);
if (filehandle == NULL)
{
InternetCloseHandle(filehandle);
error = 3;
return error;
}
else
{
LocalName = dst_fname;
if(!FtpGetFile(hFtpSession,filedata.cFileName,LocalName,false,
FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY,NULL))
{
error = 4;
return error;
}
*size = filedata.nFileSizeHigh*MAXWORD+filedata.nFileSizeLow;
}
InternetCloseHandle(filehandle); // 释放,不然下次调用FtpFindFirstFile返回的永远是NULL
return 0;
}
char *FTPError(int error)
{
if (error)
{
switch(error)
{
case 1:
return "服务器连接失败!";
case 2:
return "设置目录失败!";
case 3:
return "查找文件失败!";
case 4:
return "文件下载失败!";
case 5:
return "FTP 关闭失败!";
default :
return "一般错误!";
}
}
return "未发生错误!";
}
int FTPDisconnet()
{
int error;
if (InternetCloseHandle (filehandle)&&InternetCloseHandle (hFtpSession)
&&InternetCloseHandle (hIntSession) )
return 0;
else
error = 5;
return error;
}
void main()
{
char *sur = "0.0.0.0";//ftp地址
unsigned int port = 21;
char *usr = "xxx";//用户名
char *pwd = "xxx";//密码
char *src_fname = "//xxx";//服务器目录
char *dst_fname1 = "xxx";//本地目录
unsigned int a=5;
unsigned int *size = &a;
FTPConnect(sur,port,usr,pwd);
FTPFget(dst_fname1,src_fname,size);
//FTPFget(dst_fname2,src_fname1,size);
}
ftpdown.rar_ftpdown
版权申诉
126 浏览量
2022-09-24
14:47:03
上传
评论
收藏 12KB RAR 举报
寒泊
- 粉丝: 78
- 资源: 1万+
最新资源
- 运算放大器基础.pdf
- 本仓库包含我们队伍2019年数模美赛题目A、我们的代码及论文
- 基于JavaWeb图书管理系统课程设计软件源码+数据库+实验报告
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6172.0)
- WesternDigital-SSD-Dashboard-v4.2.2.5
- 计算机视觉,课后习题部分解答(章毓晋)
- “推荐系统”相关资源推荐
- 软件工程期末复习笔记 快速冲刺
- 毕业设计基于Spring Boot的健身房管理系统源码+数据库+使用文档(高分项目)
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6170.3)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0