Errore ftp

martedì 01 dicembre 2009 - 09.45

erik77 Profilo | Senior Member

Ciao ragazzi,
nella mia applicazione cerco di fare il trasferimento file tramite ftp . succede che se il file raggiunge una grandezza di circa 235Mb ricevo questo errore:
Unable to write data to the transport connection: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.


Questo è il codice :
Private Sub InviaFileFTP()

' set up request...
Dim clsRequest As System.Net.FtpWebRequest = _
DirectCast(System.Net.WebRequest.Create(ConfigurationManager.AppSettings("FTPPath").ToString.Trim + "Estrazione_IND_" + dt.Year.ToString("0000") + "_" + dt.Month.ToString("00") + ".txt"), System.Net.FtpWebRequest)
clsRequest.Credentials = New System.Net.NetworkCredential(ConfigurationManager.AppSettings("FTPUtenza").ToString.Trim, ConfigurationManager.AppSettings("FTPPSW").ToString.Trim)
clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile

' leggo file...
Dim bFile() As Byte = System.IO.File.ReadAllBytes(ConfigurationManager.AppSettings("FilePath").ToString.Trim + "Estrazione_IND_" + dt.Year.ToString("0000") + "_" + dt.Month.ToString("00") + ".txt")

' upload file...
Dim clsStream As System.IO.Stream = clsRequest.GetRequestStream()
clsStream.Write(bFile, 0, bFile.Length)
clsStream.Close()
clsStream.Dispose()

End Sub


grazie
Ciaooo

Brainkiller Profilo | Guru

>Ciao ragazzi,
>nella mia applicazione cerco di fare il trasferimento file tramite
>ftp . succede che se il file raggiunge una grandezza di circa
>235Mb ricevo questo errore:
>clsStream.Write(bFile, 0, bFile.Length)
>clsStream.Close()
>clsStream.Dispose()

Provo a suggerirti questa, non so se funzionerà.
Invece di fare una Write di tutto il file 230 mega, fai un ciclo e suddividi il processo di Write non so ogni ciclo fa una write di un mega, e appena dopo la Write chiamata il metodo Flush()

Chiaramente dovrai modificare gli offset sul file visto che scrivi un mega alla volta.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

blutek Profilo | Newbie

salve, io ho lo stesso problema ed avevo intuito che dipende dalla dimensione del file ed anche che soluzione stava nel creare un buffer come per il download ma non ci sono riuscito.

i file fino a 60 Mb li invia tranquillo copo di che comincia a dare l'errore.

siete riusciti a risolverlo ???

blutek Profilo | Newbie

ho risolto, ci ho messo una vita.....però è il risultato che conta.

// Codice
Dim buffer(1024) As Byte
Dim fr As FileStream = file1.Open(FileMode.Open, FileAccess.Read)
// altro codice

Dim sw As Stream = _ftpRequest.GetRequestStream()

Do While fr.Read(buffer, 0, buffer.Length) > 0
sw.Write(buffer, 0, buffer.Length)
Loop
sw.Flush()
sw.Close()
funziona benissimo con tutti i file
spero che vi possa essere utile

Brainkiller Profilo | Guru

>ho risolto, ci ho messo una vita.....però è il risultato che
>conta.

Veramente è la stessa cosa che ho scritto nella mia risposta, forse non l'hai vista ?

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

erik77 Profilo | Senior Member

grazie per l'aiuto, ho però un problema. facendo in questo modo il file di destinazione mi viene un pò più grande dell'originale in quanto sembra che scrive sempre il buffer da 1024 e probabilmente questo rimane sporco nella scrittura dell'ultimo buffer,
come si può ripulire il buffer o comunque risolvere il problema?

grazie di nuovo

Ciaooo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5