#include <WinInet.h>
#pragma comment(lib, "WinInet.lib")
HINTERNET hInternet, hConnect = NULL;// 建立会话
hInternet = InternetOpen(_T("WinInet Ftp"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0/*INTERNET_FLAG_ASYNC*/);
if (hInternet == nullptr)return ;// 建立连接
hConnect = InternetConnect(hInternet, "192.168.1.8", 21/*INTERNET_INVALID_PORT_NUMBER*/, "admin", "password",INTERNET_SERVICE_FTP, INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0);
if (hConnect == nullptr)
{InternetCloseHandle(hInternet);return ;
}// 获取远程文件大小信息
LARGE_INTEGER liSize = { 0 };
WIN32_FIND_DATA fileData;
std::string sRemoteFilename = "/远程文件名.xxx";
HINTERNET hRemoteFile = FtpFindFirstFile(hConnect, sRemoteFilename.c_str(), &fileData, 0, 0);
if (hRemoteFile == nullptr)
{// 服务器不存在该文件if (FtpPutFile(hConnect, "本地文件名.xxx", sRemoteFilename.c_str(), FTP_TRANSFER_TYPE_BINARY, 0)){// 文件上传成功}else{// 文件上传失败}
}
else
{// 服务器存在该文件,启用断点续传liSize.HighPart = fileData.nFileSizeHigh;liSize.LowPart = fileData.nFileSizeLow;InternetCloseHandle(hRemoteFile);// 获取本地文件大小HANDLE hLocalFile = CreateFile("本地文件名.xxx", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ |FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);if (INVALID_HANDLE_VALUE != hLocalFile){// 获取文件大小DWORD dwSize = GetFileSize(hLocalFile, NULL);BOOL bUploadOk = FALSE;if (dwSize > liSize.QuadPart){// 建立数据传输通道HINTERNET hRemoteFile = nullptr;std::string sCommand = format("REST %d", liSize.QuadPart);BOOL bRet = FtpCommand(hConnect, FALSE, FTP_TRANSFER_TYPE_BINARY, _T("REST 3\r\n"), 0, NULL);sCommand = format("APPE %s", sRemoteFilename.c_str());bRet = FtpCommand(hConnect, TRUE, FTP_TRANSFER_TYPE_BINARY, sCommand.c_str(), 0, &hRemoteFile);if (bRet && hRemoteFile != nullptr){// 本地文件大小比远程大,则续传SetFilePointer(hLocalFile, liSize.QuadPart, NULL, FILE_BEGIN);while (TRUE){char buffer[1024];DWORD dwRet = 0;if (ReadFile(hLocalFile, buffer, 1024, &dwRet, NULL)){if (dwRet == 0){// 文件发送完毕break;}DWORD dwSize = 0;if (!InternetWriteFile(hRemoteFile, buffer, dwRet, &dwSize)){// 发送失败break;}}else{break;}}InternetCloseHandle(hRemoteFile);}else{// 远程文件访问失败DWORD dwError;TCHAR tpszBuff[2 * 1024];DWORD dwBuffLen = 2 * 1024;bRet = ::InternetGetLastResponseInfo(&dwError, tpszBuff, &dwBuffLen);             }}CloseHandle(hLocalFile);}else{// 本地文件打开失败}
}InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);

VC++ FTP文件上传(断点续传)相关推荐

  1. JAVA大文件上传断点续传解决方案

    JAVA大文件上传断点续传解决方案 参考文章: (1)JAVA大文件上传断点续传解决方案 (2)https://www.cnblogs.com/songsu/p/11834425.html (3)ht ...

  2. php vsftpd文件上传类,php ftp文件上传函数(基础版)

    php ftp文件上传函数(基础版) 复制代码 代码如下: // 定义变量 $local_file = 'local.zip'; $server_file = 'server.zip'; // 连接F ...

  3. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...

  4. java上传ftp_java实现FTP文件上传与文件下载

    本文实例为大家分享了两种java实现FTP文件上传下载的方式,供大家参考,具体内容如下 第一种方式: package com.cloudpower.util; import java.io.File; ...

  5. 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用

    基于OkHttp .Retrofit .Volley .RxJava.Novate多种网络框架整合的快速项目开发框架,Ftp文件上传.文件下载的工具类的使用. 依赖于Ftp的jar包,对上传.下载.删 ...

  6. php 上传图片 ftp,ftp文件上传_php ftp文件上传

    摘要 腾兴网为您分享:php ftp文件上传,有道英语,央视影音,学习计时,微光等软件知识,以及天天小视频,24小时时间计算器,oki5500f打印机驱动,中天期货,差旅天下,filegee企业文件同 ...

  7. C++:FTP文件上传下载(附完整源码)

    C++:FTP文件上传下载 FTP文件下载 FTP文件上传 FTP文件下载 #include #include #include #pragma comment(lib, "WinInet. ...

  8. FTP文件上传工具类

    import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.a ...

  9. 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录

    将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...

最新文章

  1. PCL中点云数据格式之间的转化
  2. 用基于模型和接口的T4来生成RESTful服务
  3. nginx在CDN加速或使用SLB代理后,获取真实IP,做并发访问限制的方法
  4. SQL 触发器的使用
  5. 【转】JMeter学习(六)集合点
  6. 0-11 NFS与TFTP服务器配置
  7. 独立事件、笛卡尔积与矩阵向量乘法
  8. Wannafly挑战赛22: C. 多项式(大整数)
  9. Android结束进程方法
  10. 2007年测试员的工具选择排名
  11. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platf...
  12. pandas 数据分析 相关性_Pandas库学习笔记2-Pandas数据特征分析
  13. 计算机格式化后数据恢复的基础,格式化计算机硬盘后如何恢复原始数据_计算机的基本知识_IT /计算机_信息...
  14. 三维重建(SFM):图像形变对重建的影响与优化
  15. Linux内核PWN-基础ROP提权
  16. 极大似然估计原理详细说明
  17. [UAV] 无人机仿真平台搭建
  18. 最小化最大链路利用率
  19. linux 权限rwxrwxrwx(4 2 1)详细说明
  20. zabbix邮件报警发送至qq邮箱

热门文章

  1. [作业]英语作业,无聊记事
  2. 我谈网络扫描 -- 之三
  3. 计算机硬件之间是怎样联系的,计算机硬件系统和软件系统有没有联系
  4. matlab 显示绘图工具和停靠图形,4 7 交互式绘图工具ppt
  5. 我爱赚钱吧:学生都可以做的兼职工作
  6. python QQ空间新说说邮件提醒功能实现
  7. 我上半年深陷泥淖的往事
  8. leetcode算法(2)
  9. c语言程序设计名片管理系统,《名片管理系统》 - C语言课程设计
  10. 从大自然得到色彩的启示