BackgroundWorker e FtpWebRequest
lucaddr non è online. Ultima attività: 11/08/2008 8.19.32lucaddr
Inserito il: 07 agosto 2008 10.40
25 messaggi dal 17 set 2001 Istalla Microsoft Silverlight!
Ciao ragazzi,

ho un problemino con un piccolo client FTP per scaricarmi dei file da un FTP con ip pubblico.

Ho creato un backgroundworker e nel evento DoWork faccio:

foreach (object itemChecked in checkedListBox1.CheckedItems)
{
try
{
FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create("ftp://87.55.120.44/" + itemChecked.ToString());
FtpRequest.Credentials = new NetworkCredential("pippo", "pippo");
//FtpRequest.Proxy = GlobalProxySelection.GetEmptyWebProxy();
FtpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
FtpRequest.UseBinary = true;

FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse();
FileStream FileStream = new FileStream("C:\\Documents and Settings\\pippo\\Desktop\\FTP\\FTP\\bin\\Debug\\FTP\\" + itemChecked.ToString(), FileMode.Create, FileAccess.Write);
//Converto lo stram FTP in un oggetto standard Stream
Stream ResponseStream = FtpResponse.GetResponseStream();

long cl = FtpResponse.ContentLength;
int bufferSize = 2048;
byte[] buffer = new byte[bufferSize];
int readCount = ResponseStream.Read(buffer, 0, bufferSize);

while (readCount > 0)
{
for (int i = 0; i < 100; i++)
{
backgroundWorker1.ReportProgress(i);
FileStream.Write(buffer, 0, readCount);
readCount = ResponseStream.Read(buffer, 0, bufferSize);
}
}

//Chiudo gli oggetti
FileStream.Close();
ResponseStream.Close();
FtpResponse.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

Solamente che mi accorgo che il file o i file che seleziono vengono scaricati più volte...i byte nornano a zero e ricomincia la copia per una una o due volte. Poi si ferma e i file sono correttamente scaricati e utilizzabili...come mai?

Dove sbaglio?

Modificato da lucaddr il 07 agosto 2008 10.42 -

Luca Donetti Dontin
RE: BackgroundWorker e FtpWebRequest
vladimiro non è online. Ultima attività: 07/09/2008 1.32.36vladimiro
Inserito il: 07 agosto 2008 14.11
274 messaggi dal 04 ago 2002 Istalla Microsoft Silverlight!
cosi, a colpo d'occhio, hai provato a spostare quell'oggetto FileStream fuori dal ciclo for?

v

RE: BackgroundWorker e FtpWebRequest
lucaddr non è online. Ultima attività: 11/08/2008 8.19.32lucaddr
Inserito il: 07 agosto 2008 14.14
25 messaggi dal 17 set 2001 Istalla Microsoft Silverlight!
Eh si..

while (readCount > 0)
{
//for (int i = 0; i < 100; i++)
//{
//backgroundWorker1.ReportProgress(i);
FileStream.Write(buffer, 0, readCount);
readCount = ResponseStream.Read(buffer, 0, bufferSize);
//}
}

ma niente. Non capisco cosa influisce

Luca Donetti Dontin
RE: BackgroundWorker e FtpWebRequest
vladimiro non è online. Ultima attività: 07/09/2008 1.32.36vladimiro
Inserito il: 07 agosto 2008 14.36
274 messaggi dal 04 ago 2002 Istalla Microsoft Silverlight!
lucaddr ha scritto:
... ma niente. Non capisco cosa influisce


così, a colpo d'occhio, ... neppure io
se selezioni il download di un solo file, saltando in pratica il ciclo while più esterno, il problema si ripropone?

v

RE: BackgroundWorker e FtpWebRequest
lucaddr non è online. Ultima attività: 11/08/2008 8.19.32lucaddr
Inserito il: 07 agosto 2008 14.45
25 messaggi dal 17 set 2001 Istalla Microsoft Silverlight!
Porca miseria...

ho tolto il foreach ma nulla, mi ripete per due volte il ciclo di scittura del file...come se quando i bite vadano a 0 non si stoppa..

Luca Donetti Dontin
RE: BackgroundWorker e FtpWebRequest
vladimiro non è online. Ultima attività: 07/09/2008 1.32.36vladimiro
Inserito il: 07 agosto 2008 15.30
274 messaggi dal 04 ago 2002 Istalla Microsoft Silverlight!
Ora non ho vs sotto mano per fare un test; questa sera ci provo.
Se hai risolto prima tanto meglio ... però fai sapere, sono curioso ;)

v

RE: BackgroundWorker e FtpWebRequest
lucaddr non è online. Ultima attività: 11/08/2008 8.19.32lucaddr
Inserito il: 07 agosto 2008 15.32
25 messaggi dal 17 set 2001 Istalla Microsoft Silverlight!
Ok, ti ringrazio,

ci sto provando...

Luca Donetti Dontin
RE: BackgroundWorker e FtpWebRequest
vladimiro non è online. Ultima attività: 07/09/2008 1.32.36vladimiro
Inserito il: 07 agosto 2008 18.49
274 messaggi dal 04 ago 2002 Istalla Microsoft Silverlight!
io uso questo codice e non ho nessun problema:

Dim FtpRequest = CType(FtpWebRequest.Create("ftp://xxx.xxx.xxx.xxx"), FtpWebRequest)
        FtpRequest.Credentials = New System.Net.NetworkCredential("pippo", "pippo")
        FtpRequest.KeepAlive = False
        FtpRequest.UseBinary = True
        FtpRequest.Method = System.Net.WebRequestMethods.Ftp.DownloadFile

        Using response As System.Net.FtpWebResponse = _
      CType(FtpRequest.GetResponse, System.Net.FtpWebResponse)
            Using responseStream As IO.Stream = response.GetResponseStream
                'loop to read & write to file
                Using fs As New IO.FileStream("C:\test,zip", IO.FileMode.Create)
                    Dim buffer(2047) As Byte
                    Dim read As Integer = 0
                    Do
                        read = responseStream.Read(buffer, 0, buffer.Length)
                        fs.Write(buffer, 0, read)
                    Loop Until read = 0
                    responseStream.Close()
                    fs.Flush()
                    fs.Close()
                End Using
                responseStream.Close()
            End Using
            response.Close()
        End Using


noto (almeno) due differenze:
il buffer a 2047 anzichè a 2048
il controllo sul read=0 nel loop

Sull'ultimo punto vedi la nota in quest'articolo:
http://www.codeproject.com/KB/IP/FtpClient.aspx

fammi sapere ...

v



Pagine: [1] 2 Avanti >>
Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


maltra - 811 pt
vladimiro - 562 pt
fabrica - 180 pt

Ultimi vincitori: fabrica, vladimiro, PeppeDotNet

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008 + Windows Server 2008, ReShaper e 1 ebook!



COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums