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

            alantop -專業量化投資者

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

            FTP開發中下載文件的兩種方式

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

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

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

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

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

            服務器端使用filezilla 。

            5.15問題已解決,和信令無關。

            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;

            }

            第二種方式下載的函數
            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開發中下載文件的兩種方式[未登錄]  回復  更多評論   

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

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

            能支持斷點續傳么?
            2008-05-15 16:43 | 買書網
            www.久久热| 久久亚洲精精品中文字幕| 亚洲日本va午夜中文字幕久久| 久久婷婷人人澡人人爽人人爱| 精品久久久久久国产| 亚洲午夜无码久久久久小说| 国内精品久久久久影院免费| 亚洲精品乱码久久久久久蜜桃| 国产一区二区三区久久| 影音先锋女人AV鲁色资源网久久| 久久久久99精品成人片三人毛片| 久久香蕉超碰97国产精品| 日日狠狠久久偷偷色综合免费| 好久久免费视频高清| 亚洲av日韩精品久久久久久a| 久久人妻少妇嫩草AV蜜桃| 久久99国内精品自在现线| 热久久最新网站获取| 性高湖久久久久久久久AAAAA| 国产精品青草久久久久福利99| 久久精品人人做人人妻人人玩| 伊人久久大香线蕉亚洲| 久久天天躁夜夜躁狠狠| 亚洲?V乱码久久精品蜜桃| 久久精品国产欧美日韩| 久久国产精品国语对白| 久久久久97国产精华液好用吗| 久久国产精品国语对白| 久久一区二区三区免费| 亚洲精品WWW久久久久久| 亚洲婷婷国产精品电影人久久| 亚洲七七久久精品中文国产| 2021国内久久精品| 人妻无码αv中文字幕久久| 麻豆成人久久精品二区三区免费 | 污污内射久久一区二区欧美日韩| 久久99精品国产99久久6男男| 久久久久国产一级毛片高清版| 狠狠色丁香婷婷久久综合不卡 | 一本色综合久久| 久久人妻少妇嫩草AV无码专区|