• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            穩(wěn)定盈利的期貨交易方法-量化趨勢交易

            alantop -專業(yè)量化投資者

            愛好:量化投資,逆向工程,滲透
            隨筆 - 595, 文章 - 0, 評論 - 921, 引用 - 0
            數(shù)據(jù)加載中……

            FTP開發(fā)中下載文件的兩種方式

            1. 通過 GetFile 方式下載
            2. 通過 CInternetFile::Read 方式下載

            兩種方式的區(qū)別:
            第一種方式,操作級別較高。直接調(diào)用就好,這種方式封裝了一切操作。
            第二種方式,自己可以控制。其基本原理,就是在網(wǎng)絡上打開一個文件,就像本地打開文件一樣。讀取,然后寫入到本地文件。

            以下代碼,兩種方式都有,第二種方式注釋掉了。打開即可使用。

            在FTP下載中,碰到的奇異問題:
            下載大于100M的文件。
            今天,下載到最后一塊,出現(xiàn)timeout。
            在本地建立ftp良好。
            在其他測試環(huán)境良好。
            下一步,在另外一個計算機上建立ftp再測試下。確定是ftp服務器問題,還是客戶端問題。
            另外出問題的時候,用filezilla客戶端下載,良好。

            找到一個 FTP Client 類。使用后,再議。
            http://www.codeproject.com/KB/IP/ftpclientclass.aspx

            服務器端使用filezilla 。

            5.15問題已解決,和信令無關(guān)。

            bool DownloadFile(char *filename)
            {
             CInternetSession* pInetSession; //會話對象
             CFtpConnection* pFtpConnection; //連接對象
             
             pInetSession=new CInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);
             
             try
             {
              //新建連接對象
              pFtpConnection=pInetSession->GetFtpConnection("127.0.0.1", "sa", "111");
             }
             catch(CInternetException *pEx)
             {
              //獲取錯誤
              TCHAR szError[1024];
              if(pEx->GetErrorMessage(szError,1024))
               AfxMessageBox(szError);
              else 
               AfxMessageBox("There was an exception");
              pEx->Delete();
              
              return FALSE;
             }
             
             TCHAR tchBuffer[MAX_PATH];
             GetCurrentDirectory(MAX_PATH, tchBuffer);
             strcat(tchBuffer, filename + 1);
             
             
             if(pFtpConnection->GetFile(filename, "d:\\2.exe", false))
             {
              //AfxMessageBox("下載成功");
             }
             else
              DWORD dResult = GetLastError();

            /* 
             CInternetFile *pInternetFile = pFtpConnection->OpenFile(filename, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY, 1);
             char szBuffer[4096];

             CFile file("d:\\1.exe", CFile::modeWrite | CFile::modeCreate | CFile::typeBinary);
             UINT uRead;

             int count = 0;
             
             while (true)
             {
              try
              {
               uRead = pInternetFile->Read(szBuffer, 4096);
               ++count;
               TRACE2("%d %d\n", count, uRead);

              }
              catch (CInternetException *pEx)
              {
               //獲取錯誤
               TCHAR szError[1024];
               if(pEx->GetErrorMessage(szError,1024))
                AfxMessageBox(szError);
               else 
                AfxMessageBox("There was an exception");
               
               pEx->Delete();
              }
              
              file.Write(szBuffer, uRead);

              if ( uRead < 4096 )
               break;
              
             }

             file.Close();
             pInternetFile->Close();
             delete pInternetFile; */

             if ( NULL != pFtpConnection )
              pFtpConnection->Close();
             delete pFtpConnection;
             delete pInetSession;

             return true;

            }

            第二種方式下載的函數(shù)
            CString GetFTPFile(const char *ftpserver, const char *remotefile,
                                  const char *localfile )
            {
                TCHAR   szCause[255];
                CString sCause;
                sCause.Format(""); 
             
                try
                {
              TCHAR ftpAgent[256] = _T("FTPSource");
                    //create the internet session

                    CInternetSession mysession(ftpAgent,
               1,
               INTERNET_OPEN_TYPE_PRECONFIG,
               NULL,
               NULL,
                 INTERNET_FLAG_DONT_CACHE);

                    //get the ftp connection from internet session
                    CFtpConnection* pFtpConn = mysession.GetFtpConnection(ftpserver,"sa","111");
                   
                    if(pFtpConn)
                    {
               CFtpFileFind finder(pFtpConn);
               finder.FindFile(remotefile);
               finder.FindNextFile();
               
               FILE* fp = fopen(localfile,"wb");
               if(fp == NULL)
               {
                return "file open error";
               }
               __int64  _fileSize = finder.GetLength64();
               
               CInternetFile* _pFtpFile = pFtpConn->OpenFile(remotefile,
                GENERIC_READ,
                FTP_TRANSFER_TYPE_BINARY|INTERNET_FLAG_DONT_CACHE,
                1);
               
               _pFtpFile->SetReadBufferSize(READSIZE);
               int i = 1;
                        while(_fileSize > 0 )
               {
                char temp[READSIZE]= "\0";
                if(_fileSize > READSIZE)
                {
                 
                 _pFtpFile->Read((LPVOID)temp, READSIZE );     
                 _fileSize = _fileSize - READSIZE;
                 
                 fwrite(temp,READSIZE,1,fp);
                }
                else
                {
                 _pFtpFile->Read((LPVOID)temp, _fileSize );  
                 fwrite(temp,sizeof(char),_fileSize,fp);
                 _fileSize = 0;
                }
               }
               _pFtpFile->Close();
               fclose(fp);
                    }
                    else
                    {
               //could not connect
               sCause.Format("Could not connect to ftp server!! \nPlease "
                "ensure you have correct address and access rights!");
                    }     
                }
             
                catch(CException* error)
                {
                    error->GetErrorMessage(szCause,254,NULL);
                    sCause.Format("%s",szCause);
                }

                return (sCause);
            }

            posted on 2008-05-14 01:51 AlanTop 閱讀(2899) 評論(2)  編輯 收藏 引用 所屬分類: C++VC++

            評論

            # re: FTP開發(fā)中下載文件的兩種方式[未登錄]  回復  更多評論   

            第一個信令端口超時了 一定間隔內(nèi)發(fā)點命令過去就好
            最后下載結(jié)束的時候 會檢測信令端口是否超時的
            2008-05-14 08:56 | cppexplore

            # re: FTP開發(fā)中下載文件的兩種方式  回復  更多評論   

            能支持斷點續(xù)傳么?
            2008-05-15 16:43 | 買書網(wǎng)
            欧美久久久久久精选9999| 99久久精品免费看国产一区二区三区 | 久久天堂AV综合合色蜜桃网 | 激情久久久久久久久久| 久久黄视频| 国产成人精品综合久久久| 欧美精品久久久久久久自慰| 久久综合九色综合网站| 久久精品国内一区二区三区| 久久人人爽人人精品视频| 久久人人爽人人爽人人片AV麻烦| 久久精品人妻中文系列| 久久久久国产| 久久99免费视频| 久久国产免费观看精品3| 久久无码国产| 久久精品国产91久久麻豆自制| 久久久SS麻豆欧美国产日韩| 人人狠狠综合久久亚洲88| 国内精品人妻无码久久久影院| 日本五月天婷久久网站| 久久国产成人午夜aⅴ影院| 国产精品久久久久久福利漫画| 一本色道久久88—综合亚洲精品| 亚洲国产小视频精品久久久三级| 久久国产视频99电影| 精品国产乱码久久久久久浪潮| 久久成人影院精品777| 99久久国语露脸精品国产| www.久久热.com| 久久se精品一区二区| 国产精品成人99久久久久 | 国产精品久久网| www.久久99| 97超级碰碰碰碰久久久久| 国产精品久久久久久搜索| 久久91综合国产91久久精品| 久久久久久久综合日本亚洲 | 亚洲国产另类久久久精品小说| 伊人久久大香线蕉AV一区二区| 亚洲精品乱码久久久久久不卡|