• <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)定盈利的期貨交易方法-量化趨勢(shì)交易

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

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

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

            1. 通過(guò) GetFile 方式下載
            2. 通過(guò) CInternetFile::Read 方式下載

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

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

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

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

            服務(wù)器端使用filezilla 。

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

            bool DownloadFile(char *filename)
            {
             CInternetSession* pInetSession; //會(huì)話對(duì)象
             CFtpConnection* pFtpConnection; //連接對(duì)象
             
             pInetSession=new CInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);
             
             try
             {
              //新建連接對(duì)象
              pFtpConnection=pInetSession->GetFtpConnection("127.0.0.1", "sa", "111");
             }
             catch(CInternetException *pEx)
             {
              //獲取錯(cuò)誤
              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)
              {
               //獲取錯(cuò)誤
               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 閱讀(2888) 評(píng)論(2)  編輯 收藏 引用 所屬分類: C++VC++

            評(píng)論

            # re: FTP開(kāi)發(fā)中下載文件的兩種方式[未登錄](méi)  回復(fù)  更多評(píng)論   

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

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

            能支持?jǐn)帱c(diǎn)續(xù)傳么?
            2008-05-15 16:43 | 買書(shū)網(wǎng)
            久久天堂AV综合合色蜜桃网| 亚洲国产成人久久综合碰| 久久精品国产一区二区电影| 久久国产热这里只有精品| 久久国产乱子精品免费女| 久久美女网站免费| 精品久久久久久久久中文字幕| 久久精品成人免费看| 久久久久久久综合日本| 久久只有这里有精品4| 精品国产乱码久久久久久郑州公司 | 久久99精品综合国产首页| 国产三级观看久久| 久久久久久曰本AV免费免费| 久久久亚洲欧洲日产国码二区| 久久九九亚洲精品| 久久久久久久女国产乱让韩 | 国产精品久久久久久| AAA级久久久精品无码区| 久久99热这里只有精品66| …久久精品99久久香蕉国产| 久久露脸国产精品| 999久久久无码国产精品| 久久se这里只有精品| 精品蜜臀久久久久99网站| 久久免费视频一区| 久久久久免费精品国产| 亚洲国产精品久久久天堂| 久久久久亚洲av毛片大| 久久99国产精品久久久| 久久香综合精品久久伊人| 亚洲欧洲精品成人久久曰影片| 88久久精品无码一区二区毛片| 日韩精品久久久肉伦网站| 久久亚洲AV无码精品色午夜麻豆| 精品国产综合区久久久久久| 91精品国产综合久久四虎久久无码一级 | 久久亚洲欧美国产精品| 久久精品国产亚洲av麻豆蜜芽 | 国产成人久久精品一区二区三区| 色狠狠久久综合网|