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() を使用してアップロードされる前にバイトをカウントします (これが可能かどうかはわかりません)。