Oppure

Loading
14/07/09 7:46
GoLDBeRG

    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.....


  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....


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 :rotfl:
aaa
14/07/09 8:29
riseofapocalypse
Allooooora XD a parte che non ho capito qual è stavolta il problema :rotfl: innanzitutto ti avevo già consigliato di sostituire:
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:
filegen = WebRequest.Create(url).GetResponse.ContentLength

Forse non l'avevi letto :D comunque spiegami bene quale dilemma affligge il tuo programma stavolta :rofl:
Ultima modifica effettuata da riseofapocalypse 14/07/09 8:29
aaa
14/07/09 9:03
GoLDBeRG
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
aaa
14/07/09 9:11
riseofapocalypse
Una domandina! :rotfl: come suddividi la grandezza del file? Perchè nel codice è un po' difficile capirlo vista l'assenza di commenti... :D comunque io per suddividere il file farei così:
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 14/07/09 9:12
aaa
14/07/09 9:25
GoLDBeRG
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
aaa
14/07/09 9:35
riseofapocalypse
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:
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 14/07/09 9:40
aaa
14/07/09 10:32
GoLDBeRG
niente si vedono i file nell'archivio ma non li fa estrarre ce qualche byte o spostato o che non calcoliamo... sbaglio qualcosa.....
aaa
14/07/09 10:37
riseofapocalypse
Beh il problema potrebbe essere anche il salto di qualche Byte durante il Download no?
aaa