Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Ricostruzione file da parti di file .part
Forum - C# / VB.NET - Ricostruzione file da parti di file .part

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 9:46
Martedì, 14/07/2009
Codice sorgente - presumibilmente VB.NET

  1. Public ferma As Int32
  2.     Public start As Int32
  3.     Public url As Uri
  4.     Public num As Int16
  5.  
  6.     Public Sub scarica()
  7.         Dim str As Stream = File.OpenWrite("Part" & num & ".part")
  8.         impo.arrfile.Add("Part" & num & ".part")
  9.         Dim request As HttpWebRequest = WebRequest.Create(url)
  10.         request.AddRange(start, ferma)
  11.         Dim response As HttpWebResponse = request.GetResponse
  12.         Dim stream As Stream = response.GetResponseStream
  13.         While (True)
  14.             If impo.download = False Then
  15.                 Exit While
  16.             End If
  17.             Dim by(8192) As Byte
  18.             Dim int As Integer = stream.Read(by, 0, by.Length)
  19.             impo.quanti += int
  20.             impo.totali += int
  21.             Str.Write(by, 0, by.Length)
  22.             Thread.Sleep(10)
  23.             If int = 0 Then
  24.                 Exit While
  25.             End If
  26.         End While
  27.         str.Close()
  28.     End Sub
  29. 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

  1. Public Sub creafile()
  2.         While (True)
  3.             Thread.Sleep(1000)
  4.             If impo.download = False Then
  5.                 Exit Sub
  6.             End If
  7.             If impo.completato Then
  8.                 impo.completato = False
  9.                 Dim stre As Stream = File.OpenWrite("Download")
  10.                 For Each asd As String In impo.arrfile
  11.                     Me.Invoke(param, "Creazione del file... " & asd)
  12.                     Dim cosa() As Byte = File.ReadAllBytes(asd)
  13.                     stre.Write(cosa, 0, cosa.Length)
  14.                 Next
  15.                 stre.Close()
  16.                 Exit While
  17.             End If
  18.         End While
  19.         impo.download = False
  20.         Me.Invoke(param2)
  21.     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

  1. Public Sub vedi()
  2.         impo.download = True
  3.         Dim wc As New WebClient
  4.         Dim b1() As Byte = wc.Encoding.GetBytes("GET " & url & " HTTP/1.1" & vbNewLine & vbNewLine)
  5.         wc.OpenWrite(min).Write(b1, 0, b1.Length)
  6.         wc.OpenRead(url)
  7.         For Each asd As String In wc.ResponseHeaders
  8.             If IsNumeric(wc.ResponseHeaders.Item(asd)) Then
  9.                 filegen = wc.ResponseHeaders.Item(asd)
  10.             End If
  11.         Next
  12.         Dim conto As Int16 = 5
  13.         While ((filegen Mod conto) <> 0)
  14.             conto += 1
  15.         End While
  16.         Dim parte As Long = filegen / conto
  17.         For a As Integer = 0 To conto - 1
  18.             Dim f As New conn
  19.             f.start = parte * a
  20.             f.num = a
  21.             f.ferma = f.start + parte - 1
  22.             f.url = New Uri(url)
  23.             Dim g As New Thread(AddressOf f.scarica)
  24.             g.Start()
  25.             Thread.Sleep(50)
  26.         Next
  27.         Dim thr As New Thread(AddressOf creafile)
  28.         thr.Start()
  29.     End Sub



scervellatevi assieme a me :rotfl:

PM Quote
Avatar
riseofapocalypse (Ex-Member)
Pro


Messaggi: 150
Iscritto: 08/07/2009

Segnala al moderatore
Postato alle 10:29
Martedì, 14/07/2009
Allooooora XD a parte che non ho capito qual è stavolta il problema :rotfl: innanzitutto ti avevo già consigliato di sostituire:
Codice sorgente - presumibilmente VB.NET

  1. Dim wc As New WebClient
  2.         Dim b1() As Byte = wc.Encoding.GetBytes("GET " & url & " HTTP/1.1" & vbNewLine & vbNewLine)
  3.         wc.OpenWrite(min).Write(b1, 0, b1.Length)
  4.         wc.OpenRead(url)
  5.         For Each asd As String In wc.ResponseHeaders
  6.             If IsNumeric(wc.ResponseHeaders.Item(asd)) Then
  7.                 filegen = wc.ResponseHeaders.Item(asd)
  8.             End If
  9.         Next


Con:
Codice sorgente - presumibilmente Plain Text

  1. 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 il 14/07/2009 alle 10:29
PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 11:03
Martedì, 14/07/2009
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

PM Quote
Avatar
riseofapocalypse (Ex-Member)
Pro


Messaggi: 150
Iscritto: 08/07/2009

Segnala al moderatore
Postato alle 11:11
Martedì, 14/07/2009
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ì:
Codice sorgente - presumibilmente VB.NET

  1. Dim parte As Integer = grandezzafile / (numerosocket - 1) ' Questa è la grandezza della parte degli n-1 Socket
  2. 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
PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 11:25
Martedì, 14/07/2009
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

PM Quote
Avatar
riseofapocalypse (Ex-Member)
Pro


Messaggi: 150
Iscritto: 08/07/2009

Segnala al moderatore
Postato alle 11:35
Martedì, 14/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

  1. Public Sub creafile()
  2.      Do
  3.           Thread.Sleep(1000)
  4.           If Not impo.download Then Exit Sub
  5.           If impo.completato Then
  6.                impo.completato = False
  7.                Dim stre As New FileStream("Download", FileMode.Append)
  8.                For i As Integer = 0 To impo.arrfile.Count - 1
  9.                     Invoke(param, "Creazione del file... " & impo.arrfile(i))
  10.                     Dim cosa() As Byte = File.ReadAllBytes(impo.arrfile(i))
  11.                     stre.Write(cosa, 0, cosa.Length)
  12.                Next
  13.                stre.Close()
  14.                Exit Do
  15.           End If
  16.      Loop
  17.      impo.download = False
  18.      Invoke(param2)
  19. End Sub


Ultima modifica effettuata da riseofapocalypse il 14/07/2009 alle 11:40
PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 12:32
Martedì, 14/07/2009
niente si vedono i file nell'archivio ma non li fa estrarre ce qualche byte o spostato o che non calcoliamo... sbaglio qualcosa.....

PM Quote
Avatar
riseofapocalypse (Ex-Member)
Pro


Messaggi: 150
Iscritto: 08/07/2009

Segnala al moderatore
Postato alle 12:37
Martedì, 14/07/2009
Beh il problema potrebbe essere anche il salto di qualche Byte durante il Download no?

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 13:21
Martedì, 14/07/2009
purtroppo si... come facciamo ad assicurare il trasferimento?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo