- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我写了一个小程序,可以通过 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()(不是确定这是否可能)。
最佳答案
你想要:
InternetSetStatusCallback
设置将在传输期间定期调用的函数。FtpOpenFile
。这将在传输过程中传回您的状态回调函数。然后,在 FTP 操作期间,您的回调函数将被定期调用,并提供有关传输进度的信息,然后它可以将这些信息显示给用户。
我不相信这会让你在传输时显示实际字节——如果内存可用,它主要显示传输中的离散步骤,比如打开句柄、解析名称、发送/接收 cookie,最后关闭 handle 。
要处理文件本身传输期间写入的实际字节,您通常会从本地文件读取一个充满数据的缓冲区,然后使用 InternetWriteFile
写入该缓冲区。有了它,您可以计算传输的百分比,即到目前为止写入的字节数除以文件的总大小(然后乘以 100)。
关于c++ - 通过 FTP [C++] 上传文件的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817248/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!