我寫了一個小程序,它能夠通過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