gpt4 book ai didi

c++ - 通过 FTP [C++] 上传文件的进度条

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:36 25 4
gpt4 key购买 nike

我写了一个小程序,可以通过 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 << "Size: " << filesize << endl;

但是这似乎不起作用,因为 filesize 一直返回值 -1。我认为这是因为我正在写入文件(上传部分),同时我正在尝试读取它以获取文件大小。我认为这是不可能的(如果我错了请纠正我)。

我的主要问题:是否有另一种方法可以为 ftp 上传创建进度条?也许可以使用函数 readBytesCount()(不是确定这是否可能)。

最佳答案

你想要:

  1. 调用InternetSetStatusCallback设置将在传输期间定期调用的函数。
  2. 将最后一个参数的(非零)值传递给 FtpOpenFile。这将在传输过程中传回您的状态回调函数。

然后,在 FTP 操作期间,您的回调函数将被定期调用,并提供有关传输进度的信息,然后它可以将这些信息显示给用户。

我不相信这会让你在传输时显示实际字节——如果内存可用,它主要显示传输中的离散步骤,比如打开句柄、解析名称、发送/接收 cookie,最后关闭 handle 。

要处理文件本身传输期间写入的实际字节,您通常会从本地文件读取一个充满数据的缓冲区,然后使用 InternetWriteFile 写入该缓冲区。有了它,您可以计算传输的百分比,即到目前为止写入的字节数除以文件的总大小(然后乘以 100)。

关于c++ - 通过 FTP [C++] 上传文件的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com