VB6實作FTP下載,我已經有代碼了,是通過FTPGETFILE來實作的,下載小檔案的時候還能正常,下載一個大檔案的時候,就會卡了,我在網上找到有一個代碼,說在連接FTP的時候,修改第七個引數 dwFlags為INTERNET_FLAG_PASSIVE即主動模式就可以,但我試了,還是不行,我想問問還能通過什么方式實作不卡頓呢?
謝謝各位!!!
uj5u.com熱心網友回復:
INTERNET_FLAG_PASSIVE 和你的 VB6 程式卡頓沒什么關系程式之所以卡頓,是因為 FTPGETFILE API 需要時間完成,我只知道幾個作法
1. 不要用 FTPGETFILE ,改用 INet control 但 INet Control 有些設定無法變更,不見得能達到你的需求
2. 使用 Multi-Threading,但這個不容易,且要小心處理,參考 http://www.freevbcode.com/ShowCode.asp?ID=1287
3. 找一找別人寫好的控制項,記得以前有看過可以處理這種問題的
uj5u.com熱心網友回復:
也就是只要使用FTPGETFILE,就一定會卡對嗎?
uj5u.com熱心網友回復:
在 2 的方法中,其實還是用 FTPGetFile,只是另外建立一個 thread 執行,所以原程式可以繼續執行其他作業,當然需要下載檔案完成才能繼續執行的作業,還是要另一個 thread 的 FTPGetFile 完成才能繼續
uj5u.com熱心網友回復:
在加載或者處理的事件中加入此代碼:DoEvents
1、Doevents的代價是速度變慢,但要程式回應又不得不用,其實doevents陳述句允許任何應用程式執行相關事件,而不僅僅是你自己的程式,所以變得很慢。可以讓它回應本程式事件動作,需要用到api函式GetInputState
例如用: If GetInputState() Then DoEvents '來代替doevents可使回圈運行更快。
2、小心確保以 DoEvents 放棄控制權的程序,在第一次 DoEvents 回傳之前,不能再次被其他部分的代碼呼叫;否則會產生不可預料的結果。此外,如果其它的應用程式可能會和本程序以不可預知的方式進行互動操作,那么也不要使用 DoEvents,因為此時不能放棄控制權。
uj5u.com熱心網友回復:
在加載或者處理的事件中加入此代碼:
DoEvents
1、Doevents的代價是速度變慢,但要程式回應又不得不用,其實doevents陳述句允許任何應用程式執行相關事件,而不僅僅是你自己的程式,所以變得很慢。可以讓它回應本程式事件動作,需要用到api函式GetInputState
例如用: If GetInputState() Then DoEvents '來代替doevents可使回圈運行更快。
2、小心確保以 DoEvents 放棄控制權的程序,在第一次 DoEvents 回傳之前,不能再次被其他部分的代碼呼叫;否則會產生不可預料的結果。此外,如果其它的應用程式可能會和本程序以不可預知的方式進行互動操作,那么也不要使用 DoEvents,因為此時不能放棄控制權。
我代碼上也有DOEVENTS,但根本不起任何作用,因為它在執行那句代碼就卡了,據我理解,DOEVENTS就用于在回圈里面,可以不至于死回圈而已,你有通過FTPGETFILE而不卡的例子嗎?
uj5u.com熱心網友回復:
INTERNET_FLAG_PASSIVE 和你的 VB6 程式卡頓沒什么關系
程式之所以卡頓,是因為 FTPGETFILE API 需要時間完成,我只知道幾個作法
1. 不要用 FTPGETFILE ,改用 INet control 但 INet Control 有些設定無法變更,不見得能達到你的需求
2. 使用 Multi-Threading,但這個不容易,且要小心處理,參考 http://www.freevbcode.com/ShowCode.asp?ID=1287
3. 找一找別人寫好的控制項,記得以前有看過可以處理這種問題的
也就是只要使用FTPGETFILE,就一定會卡對嗎?
在 2 的方法中,其實還是用 FTPGetFile,只是另外建立一個 thread 執行,所以原程式可以繼續執行其他作業,當然需要下載檔案完成才能繼續執行的作業,還是要另一個 thread 的 FTPGetFile 完成才能繼續
這是不是類似于多行程或者多執行緒處理?
因為那個例子已經沒有辦法下載了,看里面的代碼應該不完全,只能猜想它應該類似于多執行緒或者多行程操作。
uj5u.com熱心網友回復:
用這個 Microsoft Internet Transfer Control 控制元件試試?
uj5u.com熱心網友回復:
用這個 Microsoft Internet Transfer Control 控制元件試試?
這個我試過了,但經常性會出現“記憶體為READ”等的報錯,不清楚是不是我代碼問題還是什么的,總之好不穩定。
uj5u.com熱心網友回復:
用這個試試:
Private Sub Exec(ByVal cmd As String)
Inet1.Execute , cmd
While Inet1.StillExecuting
DoEvents
Sleep 50
Wend
End Sub
uj5u.com熱心網友回復:
DoEvents 通常用在很長 loop 中,每一個回圈,都可交出控制權給系統但 call win32 API ,在這個 API 完成作業前,并不會交回控制權,所以當用 ftogetfile API 下載大檔案時,在檔案完成下載前,會有卡頓現象
Inet 我也用的不順,所以沒再使用了
可能的作法是使用多執行緒處理來避開卡頓現象
uj5u.com熱心網友回復:
DoEvents 通常用在很長 loop 中,每一個回圈,都可交出控制權給系統
但 call win32 API ,在這個 API 完成作業前,并不會交回控制權,所以當用 ftogetfile API 下載大檔案時,在檔案完成下載前,會有卡頓現象
Inet 我也用的不順,所以沒再使用了
可能的作法是使用多執行緒處理來避開卡頓現象
inet我后來下栽了個代碼,試了十幾次,都沒發現崩潰,感覺正常,你的inet哪用的不順,可否說下,我也留意一下
uj5u.com熱心網友回復:
用這個試試:
Private Sub Exec(ByVal cmd As String)
Inet1.Execute , cmd
While Inet1.StillExecuting
DoEvents
Sleep 50
Wend
End Sub
能否把進度也顯示出來
uj5u.com熱心網友回復:
現成的東西未必都好用,何必花那么多心思在應用上,自己用 socket 寫一個 FTP 協議的客戶端組件也沒多復雜的。uj5u.com熱心網友回復:
能否把進度也顯示出來
要顯示進度的話可能要用winsock控制元件了;
uj5u.com熱心網友回復:
DoEvents 通常用在很長 loop 中,每一個回圈,都可交出控制權給系統
但 call win32 API ,在這個 API 完成作業前,并不會交回控制權,所以當用 ftogetfile API 下載大檔案時,在檔案完成下載前,會有卡頓現象
Inet 我也用的不順,所以沒再使用了
可能的作法是使用多執行緒處理來避開卡頓現象
inet我后來下栽了個代碼,試了十幾次,都沒發現崩潰,感覺正常,你的inet哪用的不順,可否說下,我也留意一下
很多年前的事情了,就是連不上客戶的一個 ftp server,在 dos command 下用 ftp 指令沒問題,因為找不出原因,后來就改用 win32 API
uj5u.com熱心網友回復:
直接用HTTP下載吧,FTP現在哪有人用來批量操作的?HTTP下載,分塊下載多爽,每個檔案加個MD5碼,下完了再比較下uj5u.com熱心網友回復:
直接用HTTP下載吧,FTP現在哪有人用來批量操作的?HTTP下載,分塊下載多爽,每個檔案加個MD5碼,下完了再比較下
跪求代碼
uj5u.com熱心網友回復:
直接用HTTP下載吧,FTP現在哪有人用來批量操作的?HTTP下載,分塊下載多爽,每個檔案加個MD5碼,下完了再比較下
跪求代碼
QQ:1085992075,你FTP啥的發我Q上,我來試試
uj5u.com熱心網友回復:
直接用HTTP下載吧,FTP現在哪有人用來批量操作的?HTTP下載,分塊下載多爽,每個檔案加個MD5碼,下完了再比較下
FTP也是支持分塊(多執行緒)下載的;
uj5u.com熱心網友回復:
直接用HTTP下載吧,FTP現在哪有人用來批量操作的?HTTP下載,分塊下載多爽,每個檔案加個MD5碼,下完了再比較下
跪求代碼
QQ:1085992075,你FTP啥的發我Q上,我來試試
我是單位局域網啊,沒辦法給你試啊
uj5u.com熱心網友回復:
直接用HTTP下載吧,FTP現在哪有人用來批量操作的?HTTP下載,分塊下載多爽,每個檔案加個MD5碼,下完了再比較下
FTP也是支持分塊(多執行緒)下載的;
有好代碼嗎?來一份~感謝~~~
uj5u.com熱心網友回復:
直接用HTTP下載吧,FTP現在哪有人用來批量操作的?HTTP下載,分塊下載多爽,每個檔案加個MD5碼,下完了再比較下
FTP也是支持分塊(多執行緒)下載的;
這應該不在標準的協議中,也就是有可能沒被支援
而在某些企業環境中,就是只能使用 FTP ,無法使用 HTTP
uj5u.com熱心網友回復:
有好代碼嗎?來一份~感謝~~~
沒有代碼,有個介紹:
https://www.cnblogs.com/duanxz/p/5127105.html
uj5u.com熱心網友回復:
另外VB6不支持多執行緒,即使用某些方式實作了,也不穩定;多執行緒還是建議使用VB.Net或者C#;
uj5u.com熱心網友回復:
另外VB6不支持多執行緒,即使用某些方式實作了,也不穩定;
多執行緒還是建議使用VB.Net或者C#;
好的,感謝
uj5u.com熱心網友回復:
自已用TCP協議寫下載吧,用IE或WINNET.DLL里的API,微軟沒做好優化,問題很多uj5u.com熱心網友回復:
加我QQ:1085992075,我自已建個FTP服務器試下,可以用控制元件,物件,API等方法uj5u.com熱心網友回復:
加我QQ:1085992075,我自已建個FTP服務器試下,可以用控制元件,物件,API等方法
已添加,請通過,謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/16814.html
標籤:API
