java ftp文件上传带进度条_通过FTP上传文件的进度条[C ++]

我写了一个小程序,可以通过ftp将文件上传到服务器。由于某些文件很大,因此我想为用户创建一个进度条。因此,在上载期间,我需要每隔一定的时间知道向服务器发送了多少字节,以便得出已上载文件的百分比。到目前为止我尝试过的是:

当我调用函数FtpPutFile()上传文件时,我使用以下代码生成了一个线程:

hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);

hFtpSession = InternetConnect(hInternet, ftpserver, port, user, pass, INTERNET_SERVICE_FTP, 0,    0);

int filesize = 0; // 2GB max

hFile = FtpOpenFile(hFtpSession,szFileTitle,GENERIC_READ,FTP_TRANSFER_TYPE_BINARY,0);

filesize = FtpGetFileSize(hFile,0);

cout <

但是,这似乎不起作用,因为文件大小不断返回值-1。我认为这是由于以下事实:我正在写入文件(上传部分),并且同时试图读取文件以获取文件大小。我认为这是不可能的(如果我错了,请纠正我)。

我的主要问题:还有其他方法可以创建用于ftp上传的进度条吗?也许在使用函数readBytesCount()上传之前对字节进行计数(不确定是否可以这样做)。

你想要:

调用InternetSetStatusCallback设置将在传输期间定期调用的函数。

将最后一个参数(非零)值传递给FtpOpenFile。这将在传输过程中传递回状态回调函数。

然后,在FTP操作期间,将定期使用有关传输进度的信息调用回调函数,然后将其显示给用户。

我认为这不会让您在传输实际字节时显示它们-如果内存服务它主要显示传输中的离散步骤,例如打开句柄,解析名称,发送/接收Cookie并最终关闭手柄。

为了处理在文件本身传输过程中写入的实际字节,通常需要从本地文件读取充满数据的缓冲区,然后使用InternetWriteFile写入该缓冲区。这样,您可以计算出的传输百分比,即到目前为止已写入的字节数除以文件的总大小(再乘以100)。

感谢您的回复,杰里。 您能否详细说明最后一段? 从文件中读取数据缓冲区后,如何记住文件中的位置(因此我不会多次发送相同的数据)?

@Rob:好吧,基本上,您将有一个正常的循环来读取一个块,然后将其写出,直到到达文件末尾为止。 除非您进行重叠的读取,否则您无需明确记住文件位置-您只需使用std::istream::tellg进行检索即可。

知道了,再次感谢!

好吧,我通过分块发送文件并更新进度来代替通过一次调用FtpPutFile的方式发送整个文件来解决此问题。

我的意思是:

FtpOpenFile(...)

for( ... )

{

InternetWriteFile(... dwChunkSize...)

UpdateProgressBar(dwChunkSize)

}

InternetCloseHandle(...)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值