GoLDBeRG (Ex-Member)
Expert
Messaggi: 331
Iscritto: 19/12/2005
|
Codice sorgente - presumibilmente VB.NET |
Public ferma As Int32 Public start As Int32 Public url As Uri Public num As Int16 Public Sub scarica() Dim str As Stream = File. OpenWrite("Part" & num & ".part") impo.arrfile.Add("Part" & num & ".part") Dim request As HttpWebRequest = WebRequest.Create(url) request.AddRange(start, ferma) Dim response As HttpWebResponse = request.GetResponse Dim stream As Stream = response.GetResponseStream While (True) If impo.download = False Then Exit While End If Dim by(8192) As Byte Dim int As Integer = stream.Read(by, 0, by.Length) impo.quanti += int impo.totali += int Str.Write(by, 0, by.Length) Thread.Sleep(10) If int = 0 Then Exit While End If End While str.Close() End Sub End Class
|
allora con questo codice scarico la singola parte di un file quindi creo il conseguente file .part numerato... quindi so come sono i file in sequenza..... poi devo ricostruire il maledetto file quindi ho questa procedura.....
Codice sorgente - presumibilmente VB.NET |
Public Sub creafile() While (True) Thread.Sleep(1000) If impo.download = False Then Exit Sub End If If impo.completato Then impo.completato = False Dim stre As Stream = File. OpenWrite("Download") For Each asd As String In impo.arrfile Me.Invoke(param, "Creazione del file... " & asd) Dim cosa () As Byte = File. ReadAllBytes(asd ) stre.Write(cosa, 0, cosa.Length) Next stre.Close() Exit While End If End While impo.download = False Me.Invoke(param2) End Sub
|
la procedura resta in circolo finche o il download non è annullato o finche non completo tutti i download.... voi penserete.... non è detto che il file part0 sia stato creato prima del file part1... e invece si quindi non è quello il problema.... il problema o sta nella ricostruzione.... o in questa altra procedura dove do i parametri di addrange ai singoli download....
Codice sorgente - presumibilmente VB.NET |
Public Sub vedi() impo.download = True Dim wc As New WebClient Dim b1() As Byte = wc.Encoding.GetBytes("GET " & url & " HTTP/1.1" & vbNewLine & vbNewLine) wc.OpenWrite(min).Write(b1, 0, b1.Length) wc.OpenRead(url) For Each asd As String In wc.ResponseHeaders If IsNumeric(wc.ResponseHeaders.Item(asd)) Then filegen = wc.ResponseHeaders.Item(asd) End If Next Dim conto As Int16 = 5 While ((filegen Mod conto) <> 0) conto += 1 End While Dim parte As Long = filegen / conto For a As Integer = 0 To conto - 1 Dim f As New conn f.start = parte * a f.num = a f.ferma = f.start + parte - 1 f.url = New Uri(url) Dim g As New Thread(AddressOf f.scarica) g.Start() Thread.Sleep(50) Next Dim thr As New Thread(AddressOf creafile) thr.Start() End Sub
|
scervellatevi assieme a me |
|
riseofapocalypse (Ex-Member)
Pro
Messaggi: 150
Iscritto: 08/07/2009
|
Allooooora XD a parte che non ho capito qual è stavolta il problema innanzitutto ti avevo già consigliato di sostituire:
Codice sorgente - presumibilmente VB.NET |
Dim wc As New WebClient Dim b1() As Byte = wc.Encoding.GetBytes("GET " & url & " HTTP/1.1" & vbNewLine & vbNewLine) wc.OpenWrite(min).Write(b1, 0, b1.Length) wc.OpenRead(url) For Each asd As String In wc.ResponseHeaders If IsNumeric(wc.ResponseHeaders.Item(asd)) Then filegen = wc.ResponseHeaders.Item(asd) End If Next
|
Con:
Codice sorgente - presumibilmente Plain Text |
filegen = WebRequest.Create(url).GetResponse.ContentLength
|
Forse non l'avevi letto comunque spiegami bene quale dilemma affligge il tuo programma stavolta Ultima modifica effettuata da riseofapocalypse il 14/07/2009 alle 10:29 |
|
GoLDBeRG (Ex-Member)
Expert
Messaggi: 331
Iscritto: 19/12/2005
|
si scusa non avevo letto mi sembra un codice molto piu pulito ora.....
cmq il problema è che quando creo il file originale unendo i file .part il file che fuoriesce non è perfettamente lo stesso... ad esempio uno zip si apre e vedo i file dentro ma non posso aprirli e da errore
|
|
riseofapocalypse (Ex-Member)
Pro
Messaggi: 150
Iscritto: 08/07/2009
|
Una domandina! come suddividi la grandezza del file? Perchè nel codice è un po' difficile capirlo vista l'assenza di commenti... comunque io per suddividere il file farei così:
Codice sorgente - presumibilmente VB.NET |
Dim parte As Integer = grandezzafile / (numerosocket - 1) ' Questa è la grandezza della parte degli n-1 Socket Dim resto As Integer = grandezzafile Mod (numerosocket - 1) ' Questa è la grandezza della parte dell'ultimo Socket
|
Ultima modifica effettuata da riseofapocalypse il 14/07/2009 alle 11:12 |
|
GoLDBeRG (Ex-Member)
Expert
Messaggi: 331
Iscritto: 19/12/2005
|
la grandezza di ogni singola parte e il numero di socket la calcolo cosi
finche la grandezza del file / il numero di socket non ha resto 0
ossia finche il numero dei socket non è un divisore preciso dei byte del file...
quindi le parti dei file sono sempre uguali.
il problema sorge nella ricostruzione secondo me perche ho visto mentre suddivido ad esempio
0-15
16-31
32-64
etc etc
fino alla grandezza del file quindi suddivido e scarico bene.... secondo me sbaglio nella ricostruzione
|
|
riseofapocalypse (Ex-Member)
Pro
Messaggi: 150
Iscritto: 08/07/2009
|
Quindi tu dici che secondo te il problema sta in quella procedura! Bene, prova questa, l'ho leggermente modificata, ma il funzionamento non dovrebbe cambiare:
Codice sorgente - presumibilmente VB.NET |
Public Sub creafile() Do Thread.Sleep(1000) If Not impo.download Then Exit Sub If impo.completato Then impo.completato = False Dim stre As New FileStream("Download", FileMode.Append) For i As Integer = 0 To impo.arrfile.Count - 1 Invoke(param, "Creazione del file... " & impo.arrfile(i)) Dim cosa () As Byte = File. ReadAllBytes(impo. arrfile(i )) stre.Write(cosa, 0, cosa.Length) Next stre.Close() Exit Do End If Loop impo.download = False Invoke(param2) End Sub
|
Ultima modifica effettuata da riseofapocalypse il 14/07/2009 alle 11:40 |
|
GoLDBeRG (Ex-Member)
Expert
Messaggi: 331
Iscritto: 19/12/2005
|
niente si vedono i file nell'archivio ma non li fa estrarre ce qualche byte o spostato o che non calcoliamo... sbaglio qualcosa.....
|
|
riseofapocalypse (Ex-Member)
Pro
Messaggi: 150
Iscritto: 08/07/2009
|
Beh il problema potrebbe essere anche il salto di qualche Byte durante il Download no?
|
|
GoLDBeRG (Ex-Member)
Expert
Messaggi: 331
Iscritto: 19/12/2005
|
purtroppo si... come facciamo ad assicurare il trasferimento?
|
|