我写了一个小程序,它能够通过FTP上传文件到服务器。由于我想为用户创建一个进度条,因此需要大量的文件。因此,在上传过程中,我需要知道为了获取已上传文件的百分比,已经向服务器发送了多少字节。什么到目前为止,我曾尝试:进度条[C++]
虽然我调用函数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;
然而,这似乎并不工作文件大小保持返回值-1。我认为这是由于我正在写一个文件(上传部分),同时我正在尝试读取它以获取文件大小。我认为这是不可能的(如果我错了,请纠正我)。
我的主要问题:有另一种方式来创建FTP上传进度条?也许计数字节之前他们使用的功能readBytesCount()(不知道这是可能的),上传的照片。
感谢您的答复杰瑞。你能否详细说明最后一段?从文件中读取数据缓冲区后,如何记住文件中的位置(所以我不会多次发送相同的数据)? – Rob 2012-08-05 16:14:03
@Rob:好了,你基本上将有一个正常的循环读取块,然后将它写出来,直到你到达文件的末尾。除非你做重叠读取,否则你不需要明确地记住文件的位置 - 你可以用(例如)'std :: istream :: tellg'来检索它。 – 2012-08-05 16:19:48
明白了,再次感谢! – Rob 2012-08-05 17:50:36