• <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)
            久久夜色精品国产www| 亚洲一本综合久久| 久久久久亚洲AV无码去区首| 久久青青草原精品国产软件| 日产精品久久久久久久| 狠狠精品干练久久久无码中文字幕 | 国产一区二区精品久久岳| 99久久人妻无码精品系列| 久久AV高清无码| 久久久久噜噜噜亚洲熟女综合| 久久精品国产亚洲精品2020| 久久亚洲精品国产精品婷婷| 国产精品久久久久天天影视| 久久香综合精品久久伊人| 国产精品成人99久久久久| 久久最近最新中文字幕大全 | 亚洲а∨天堂久久精品9966| 久久精品国产亚洲77777| 久久精品国产99久久久香蕉| 精品久久久久久中文字幕人妻最新 | 人妻精品久久久久中文字幕| 狠狠色丁香婷婷久久综合不卡| 精品久久久久久久久午夜福利| 2020久久精品亚洲热综合一本| 无码国内精品久久人妻麻豆按摩| 久久99精品国产一区二区三区| 中文字幕乱码久久午夜| 日韩人妻无码一区二区三区久久 | 亚洲天堂久久久| 久久艹国产| 久久九九久精品国产免费直播| 久久se精品一区精品二区| 2021精品国产综合久久| 国产亚洲综合久久系列| 久久久久成人精品无码中文字幕| 漂亮人妻被中出中文字幕久久| 久久久久久久久66精品片| 亚洲国产成人久久精品99| 亚洲色欲久久久综合网| 人妻精品久久无码专区精东影业 | 亚洲国产精品成人久久|