FTPサーバからファイルサイズの取得について

[戻る]
りんご 2004/04/13(火) 10:24:08
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

瀬戸っぷ [E-Mail] 2004/04/13(火) 11:54:07
> ほかの方法もいろいろ探したのですがMFCを使用すると
> CInternetFile::GetLength()しか方法はないと思うのですが・・・

MFCは使っていませんし、InternetAPIもほとんど使ったコトはないのですが…
CFtpFileFind::FindFile()はどうでしょうか?
検索させてから、CFtpFileFind::GetLength()で取得できるかと…

# ただ、別の掲示板でFtpFindFirstFile()での挙動が…とかいうのがありましたが。

りんご 2004/04/13(火) 15:41:46
[[解決]]
瀬戸っぷさま、ご返信ありがとうございます。
ずばり解決いたしました。

ファイルリストを取得する必要がないため、
CFtpFileFindは軽く見ただけで流していました。

> # ただ、別の掲示板でFtpFindFirstFile()での挙動が…とかいうのがありましたが。
今のところ、ファイル名を指定してFindFile()をする限り
正常に動作いたしますので、この方法でいこうと思います。

本当にありがとうございました。

古いスレッドには追加発言できません。