CInternetSession *cis;
CFtpConnection *ftp;
CInternetFile *IFile;
cis=new CInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);
try
{
ftp=cis->GetFtpConnection(ServerIP,UserName,Password,Port,true);
IFile=ftp->OpenFile("doc/python1.bmp");
CTest1Dlg::m_size=IFile->GetLength();
CTest1Dlg::m_tag="1";
UpdateData(FALSE);
}
catch(CInternetException *pEx)
{
CTest1Dlg::m_tag="0";
UpdateData(FALSE);
pEx->Delete();
}
但是不管什么文件都是4320

解决方案 »

  1.   

    小于4K的返回值好象都正确
    可是,几十K以上的,就不行了,有人告诉我一下吗
    CTest1Dlg::m_size我这个是long类型的
      

  2.   

    typedef DWORD (WINAPI *FtpGetFileSize_Proc)(HINTERNET, LPDWORD);
    HINSTANCE hInst = LoadLibrary("wininet.dll");
    if(hInst == NULL)
    {
     ...
    }FtpGetFileSize_Proc pfnFtpGetFileSize = (FtpGetFileSize_Proc)GetProcAddress(hInst, "FtpGetFileSize");HINTERNET hFile = FtpOpenFile(....);
    if (hFile == NULL)
    {
    ...
    }file_len = pfnFtpGetFileSize(hFile, NULL);
    FreeLibrary(hInst );
      

  3.   

    用socket直接发送list命令,解析返回字符串
      

  4.   

    file = pFtpConnection->OpenFile(strFileName);   
    if(file)
    {
    char mydata[256] = {0};
    DWORD dwBytesReaded = 0;
    while (TRUE)
    {
    int nowbytes = 0;
    nowbytes = file->Read(mydata, 256);
    if ( nowbytes == 0) break;
    dwBytesReaded += nowbytes;
    }
    cb = dwBytesReaded;
    }cb是文件长度
      

  5.   

    直接使用套接字 //取文件大小
    CString Temp;
    Temp="SIZE //test.jpg\r\n"; 
    testSocket.Send(Temp,Temp.GetLength(),0); 
    int n1;
    CString sResp;
    char sRecv[255] = {0};
    n1=testSocket.Receive(sRecv,255);
    sResp=sRecv;
    sResp=sResp.Right(sResp.GetLength()-4);
    FileSize=atof(sResp);