国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用任務條跟蹤文件下載

2019-11-17 05:30:07
字體:
來源:轉載
供稿:網友

  本文所附源程序中有具體注解,便于程序員加深理解和應用代碼。  
                 
注重:本文代碼不是最快的和最有效的代碼。我有一套更快的代碼。希望你在閱讀本文之后能編寫出自己的高效代碼。  

概要  
程序用線程治理下載過程,這樣主程序就不會被封閉,程序還有中止下載的功能。下載過程在線程中單獨進行,并隨時刷新屏幕上的任務條狀態。  

創建下載文件:  
CInternetsession  netSession;  
CStdioFile  *file;  

file  =  netSession.OpenURL(char  url,1,INTERNET_FLAG_TRANSFER_BINARY      INTERNET_FLAG_RELOAD);  

函數創建一個CStdioFile類型的文件指針,文件存放在本地硬盤。注重有的服務器可能要求文件的讀寫許可。  

文件的讀寫:  
file-  >Read(char  buffer,int  bytes  to  read);  
CFile  fl;  
fl.Open(  "myfile  ",CFile::modeCreate      CFile::modeWrite      CFile::typeBinary);  
fl.Write(buffer,bytes  read);  

任務條,數據傳送及其它  
任務條用CPRogressCtrl::SetRange32();  函數,它有最小值和最大值二個參數。最小值是0,最大值是文件大小。文件的大小可用下面函數獲得:  
int  x  =  file-  >SeekToEnd();  

::SeekToEnd()函數返回文件的所有字節數,即文件大小。  

讀取一個文件數據包就刷新一次任務條。文件數據包為512字節,這樣不會阻塞連接。也就是執行一次file-  >Read()函數就刷新一次任務條:  
while(int  bytesread  =  file-  >Read(charbuf,512))  
{  
currentbytes  =  currentbytes  +  bytesread;  
CProgressCtrl::SetPos(currentbytes);  
}  

以下代碼計算下載字節數,百分比和下載速度(kb/sec):  

int  percent  =  currentbytes  *  100  /  x  (文件大小);  
int  kbreceived  =  currentbytes  /  1024;  

在進入文件下載的循環體前先創建一個COleDateTime對象并設置下載起始時間,然后聲明一個變量(double)來存放下載過程中的時間與起始時間的時間差(單位是秒):  
COleDateTime  dlStart  =  COleDateTime::GetCurrentTime();  
double  secs;  

在下載循環體內用COleDateTimeSpan對象來計算下載花費的時間(秒):  
COleDateTimeSpan  dlElapsed  =  COleDateTime::GetCurrentTime()  -  dlStart;  
secs  =  dlElapsed.GetTotalSeconds();  


將接收到的字節數除以花費時間即可得下載速率:  
double  kbsec  =  kbreceived  /  secs;  

這里簡單敘述了用任務條跟蹤文件下載的基本過程。其它如出錯處理等詳情可閱讀附件程序。  

希望本文有助于理解從網上下載文件的各個環節。  
示例下載:  
http://www.gois.ws/files/attach/200210/200210040301520.zip  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巨野县| 赫章县| 大余县| 青海省| 江阴市| 庆云县| 赤水市| 思茅市| 开原市| 枣阳市| 湛江市| 梧州市| 武义县| 桦南县| 江华| 合山市| 河东区| 商丘市| 砚山县| 平泉县| 九江市| 建瓯市| 江门市| 南安市| 井冈山市| 长岛县| 怀来县| 文水县| 襄汾县| 海晏县| 怀宁县| 昌黎县| 古田县| 应用必备| 连平县| 揭西县| 诏安县| 鄂托克旗| 玉溪市| 永定县| 应用必备|