2013-07-30 6 views
1

Ceci télécharge un fichier .csv via FTP. Le fichier est 46k sur le serveur. Quand je télécharge, il est tronqué à 44k. Je n'ai aucune idée pourquoi ... quand je vois les données dans Excel, il est coupé court. J'ai augmenté le tampon à 4096 mais pas de dés (ce n'est probablement pas le problème).Le téléchargement du fichier FTP (.csv) est tronqué

Je saisis à l'origine le code suivant et pincé à partir de: Downloading Files Using FTPWebRequest

Toutes les pensées appréciées! Merci.

private void DownloadFile(string userName, string password, string ftpSourceFilePath, string localDestinationFilePath) 
    { 
     int bytesRead = 0; 
     byte[] buffer = new byte[2048];    

     FtpWebRequest request = CreateFtpWebRequest(ftpSourceFilePath, userName, password, false); 
     request.Method = WebRequestMethods.Ftp.DownloadFile; 

     Stream reader = request.GetResponse().GetResponseStream(); 
     FileStream fileStream = new FileStream(localDestinationFilePath, FileMode.Create); 

     while (true) 
     { 
      bytesRead = reader.Read(buffer, 0, buffer.Length);        

      if (bytesRead == 0) 
       break; 

      fileStream.Write(buffer, 0, bytesRead); 
     } 
    } 

    private FtpWebRequest CreateFtpWebRequest(string ftpDirectoryPath, string userName, string password, bool keepAlive) 
    { 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(ftpDirectoryPath)); 

     //Set proxy to null. Under current configuration if this option is not set then the proxy that is used will get an html response from the web content gateway (firewall monitoring system) 
     request.Proxy = null; 

     request.UsePassive = true; 
     request.UseBinary = true; 
     request.KeepAlive = keepAlive; 

     request.Credentials = new NetworkCredential(userName, password); 

     return request; 
    } 
+0

Toujours utiliser le bloc-notes trop regarder à votre fichier CSV, et ensemble binaire false – meda

+0

Qu'est-ce qui se passe si vous ajoutez un fileStream.Close() juste après la boucle while? Ou si vous faites votre tampon si gros que le fichier entier tient dans une lecture? – rene

+0

@rene> le fichier fileStream.Close() a fonctionné! bravo ... si je pouvais, j'accepterais ta réponse mais je suppose que nous ne pouvons pas accepter les commentaires ... merci! – nanonerd

Répondre

2

Essayez cette approche:

private void DownloadFile(string userName, string password, string ftpSourceFilePath, string localDestinationFilePath) 
{ 
    int Length = 2048; 
    Byte[] buffer = new Byte[Length]; 
    int bytesRead = responseStream.Read(buffer, 0, Length);  

    FtpWebRequest request = CreateFtpWebRequest(ftpSourceFilePath, userName, password, false); 
    request.Method = WebRequestMethods.Ftp.DownloadFile; 

    Stream reader = request.GetResponse().GetResponseStream(); 
    FileStream fileStream = new FileStream(localDestinationFilePath, FileMode.Create); 

    while (bytesRead > 0) 
      { 
     //if (bytesRead == 0) 
      // break; 
       bytesRead = responseStream.Read(buffer, 0, Length); 
       fileStream.Write(buffer, 0, bytesRead); 
      } 

     fileStream.Close(); 
} 
+0

remercie l'homme. Il me manquait fileStream.Close() qui provoquait la troncature ... la logique "while" est en fait correcte ... – nanonerd

Questions connexes