MFCを使用して、FTPサーバからファイルのダウンロードをしたいと思っています。
ダウンロード経過をプログレスバーで表示したいのですが、
ファイルサイズの取得で行き詰っています。
CInternetFile::GetLength()を使用して
ファイルの長さを取得していますが、戻り値が8192バイトや1440バイト等
不定の値が返ってくることがあり、解決できません。
(正しい値が入っていることもあります。)
ほかの方法もいろいろ探したのですがMFCを使用すると
CInternetFile::GetLength()しか方法はないと思うのですが・・・
なにかアドバイスをいただけたら幸いです。
下記のプログラムでファイル自体はダウンロードできます。
CInternetSession* pSession = new CInternetSession();
CFtpConnection* pFtpConnection = pSession->GetFtpConnection(strServerName);
CInternetFile* pFile = pFtpConnection->OpenFile(strRemoteFile);
ULONGLONG ullLength = pFile->GetLength;
TCHAR* pBuf = new TCHAR[(size_t)ullLength];
while((UINT)pFile->Read(&pBuf[i], 1))
{
// プログレスバーに通知
i++;
}
// 終了処理
環境:Win2000SP3,VC++7,MFC
> ほかの方法もいろいろ探したのですがMFCを使用すると
> CInternetFile::GetLength()しか方法はないと思うのですが・・・
MFCは使っていませんし、InternetAPIもほとんど使ったコトはないのですが…
CFtpFileFind::FindFile()はどうでしょうか?
検索させてから、CFtpFileFind::GetLength()で取得できるかと…
# ただ、別の掲示板でFtpFindFirstFile()での挙動が…とかいうのがありましたが。
瀬戸っぷさま、ご返信ありがとうございます。
ずばり解決いたしました。
ファイルリストを取得する必要がないため、
CFtpFileFindは軽く見ただけで流していました。
> # ただ、別の掲示板でFtpFindFirstFile()での挙動が…とかいうのがありましたが。
今のところ、ファイル名を指定してFindFile()をする限り
正常に動作いたしますので、この方法でいこうと思います。
本当にありがとうございました。