209 messaggi dal 02 novembre 2010
Ciao a tutti, ho un problema con la trasmissione tramite FTP di file TXT.

In sostanza tra un record ed un altro viene inserito un CR, inserendomi praticamente una riga vuota.
Nel file originale in locale ovviamente tutto è perfetto.

Sto usando questo codice:

String nomefile = pathFile.Replace(cr.GetConfig("path") + @"creati\", "");
String uriString = Console.ReadLine();

// Create a new WebClient instance.
WebClient myWebClient = new WebClient();
myWebClient.Credentials = new NetworkCredential("******", "*******");

String ftp = "ftp://edi******.org/";

foreach (String nomepdf in elencoPDF)
{
    byte[] responseArray = myWebClient.UploadFile(ftp + nomefile, pathFile);
}


Non capisco che fargli, avete qualche suggerimento?
Modificato da GANDULE il 28 marzo 2019 11:04 -
11.448 messaggi dal 09 febbraio 2002
Contributi
Ciao,
FTP ha due modalità di trasferimento: ASCII e Binary. Se usi ASCII, i caratteri di fine riga potrebbero essere alterati, come spiegato da questo articolo.

Quindi prova a forzare la modalità Binary, in modo che il tuo file venga trasferito senza alterazioni.

Qui c'è un esempio di funzione UploadFile, dove vedi che infatti viene impostata la proprietà UseBinary = true.
https://www.c-sharpcorner.com/UploadFile/kirtan007/download-upload-binary-files-on-ftp-server-using-C-Sharp/

ciao,
Moreno
Modificato da BrightSoul il 28 marzo 2019 13:47 -

Enjoy learning and just keep making
209 messaggi dal 02 novembre 2010
Grazie Moreno, in effetti l'articolo sembra proprio parlare del mio caso; però pur forzando la la gestione binaria continua a farmi lo stesso scherzo.

String nomefile = pathFile.Replace(cr.GetConfig("path") + @"creati\", "");
//string purefilename = new FileInfo(cr.GetConfig("path") + @"creati\", "").Name;

String ftp = "ftp://********.org/";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftp + nomefile);
request.Proxy = null;
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("******", "*******");
request.UsePassive = true;

StreamReader sourceStream = new StreamReader(pathFile);

byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
//FtpWebResponse response = (FtpWebResponse)request.GetResponse();
//response.Close();
requestStream.Close();
sourceStream.Close();

Modificato da GANDULE il 28 marzo 2019 14:27 -
11.448 messaggi dal 09 febbraio 2002
Contributi
Ciao,
prova con questo codice che ottimizza un po' l'uso delle risorse ma non credo che riuscirà a risolvere il tuo problema.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftp + nomefile);
request.Proxy = null;
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("******", "*******");
request.UsePassive = true;

using (var sourceStream = File.OpenRead(pathFile))
{
    request.ContentLength = sourceStream.Length;
    using (var requestStream = request.GetRequestStream())
    {
        sourceStream.CopyTo(requestStream);
        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
        {
            //Devi fare qualcosa con response?
        }
    }
}


Hai visto se il problema ti si verifica anche se trasferisci il file con FileZilla (modalità Binary)?
Sei assolutamente sicuro che i caratteri CR non siano già nei tuoi file? Come hai verificato che non ci sono?

ciao,
Moreno
Modificato da BrightSoul il 28 marzo 2019 22:53 -

Enjoy learning and just keep making
209 messaggi dal 02 novembre 2010
Sul mio file direi che non ci sono.
Ho aperto il file con notepad++ e gli ho detto di visualizzarmi tutti i simboli.

Fintanto che sta in locale non li vedo, ma una volta giunti in remoto mi mette tutti i CR.
11.448 messaggi dal 09 febbraio 2002
Contributi
Ok, vorrei capire se è un problema del server FTP o del codice. Quindi prova a trasferire i file usando FileZilla. Osservi lo stesso problema? Prova sia in modalità ASCII che in modalità Binary. In questa immagine vedi come configurare la modalità.
http://mingersoft.com/blog/wp-content/uploads/2011/01/FileZilla-ASCII-Transfer-File-Types.png

ciao,
Moreno
Modificato da BrightSoul il 04 aprile 2019 20:26 -

Enjoy learning and just keep making
209 messaggi dal 02 novembre 2010
È proprio un problema di codice, trasferendolo manualmente il problema non si presenta.
Provo ad impostarlo come ASCII, vediamo che succede. Grazie ancora Moreno
209 messaggi dal 02 novembre 2010
Direi che non è un problema ASCII, BINARIO.
In manuale usando FileZilla utilizzando sia l'una che l'altra impostazione non ho replicato il problema.

Eppure il codice non mi sembra che abbia niente di anomalo

String ftp = "ftp://" + cr.GetConfig("indirizzoFTP") + "/";
String utenteFtp = cr.GetConfig("utenteFTP");
String passwordFtp = cr.GetConfig("passwordFTP");

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftp + nomefile);
request.Proxy = null;
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(utenteFtp, passwordFtp);
request.UsePassive = true;


using (var sourceStream = File.OpenRead(pathFile))
{
       request.ContentLength = sourceStream.Length;
       using (var requestStream = request.GetRequestStream())
       {
            sourceStream.CopyTo(requestStream);
       }
}

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.