我用CFtpConnection的GetFile下载文件,每隔5分钟下载相同文件名的文件。但是第二次
下载的文件和第一次下载文件的内容一样。可是直接用FTP客户端下载,文件内容就变了后改用CInternetFile类在FTP上打开文件,采用读取一部分内容,写入本地文件内容。发现25K的文件,只读取了12K,就结束了,代码如下 //打开FTP服务器上文件
CInternetFile *pInternetFile = pConn->OpenFile((LPCSTR)_strFileName, GENERIC_READ
                                                        ,FTP_TRANSFER_TYPE_ASCII);
if (pInternetFile == NULL) {
    strMessage.Format("%s 打开远端文件%s失败", strCurrentTime, _strFileName);
AddMessage(strMessage); 
    return bRet;
} CFile fLocal;

//以相同的文件名创建本地文件
if (!fLocal.Open(_strFileName, CFile::modeCreate | CFile::modeWrite, NULL)) {                                                                
 strMessage.Format("%s 创建本地文件%s失败",          strCurrentTime, _strFileName);
AddMessage(strMessage);
return bRet;
}
        
//将远端文件内容写入本地文件
         char buffer[2048] = "\0";
int nBytesRead = 2048;
         int nTotalLen = 0;

while (nBytesRead != 0) {
memset(buffer, 0x00, sizeof(buffer));
    nBytesRead = pInternetFile->Read(buffer, 2047);
fLocal.Write(buffer, nBytesRead);
    nTotalLen += nBytesRead;
}
请列位高手赐教                                                多谢了

解决方案 »

  1.   

    给你个2年前偶写的FTP文件下载函数:BOOL CQueryInfoApp::FtpGetInfoFile(CString &FtpServerName,
    int  nPort,
                CString &SerDirectory,
    CString &LocDirectory,
    CString &FileName,
    CString &UserName,
    CString &UserPassword)
    {
    //从指定的FTP服务器上指定的目录上下载指定的文件到本地机上指定的路径下
    char szAppName[256];//应用程序名称
    strcpy(szAppName,AfxGetAppName());//得到应用程序名称 BOOL result;//返回结果 HINTERNET hInetSession=InternetOpen(szAppName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
    //建立INTERNET会话
    HINTERNET hFtpConn=InternetConnect(hInetSession,FtpServerName,nPort,
    UserName,UserPassword,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
    //建立FTP连接
    if(!hFtpConn)
    {
    InternetCloseHandle(hInetSession);//关闭会话
    return FALSE;//返回FALSE
    }
    FtpSetCurrentDirectory(hFtpConn,SerDirectory);//设置FTP当前工作目录
        SetCurrentDirectory(LocDirectory);//设置本地当前工作目录
    result=FALSE;
    int retrytimes=0;//重试下载文件次数
    while(result==FALSE && retrytimes<20)
    {//如果下载结果为FALSE并且重试次数小于20,则执行下面循环
    if(retrytimes>0)Sleep(20);
    result=FtpGetFile(hFtpConn,FileName,LocDirectory+"\\"+FileName,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY|
    INTERNET_FLAG_NO_CACHE_WRITE,0)?TRUE:FALSE;
    retrytimes++;
    }
    return result;
    }