2013-07-30 3 views
1

Загружает CSV-файл, используя FTP. Файл - 46k на сервере. Когда я загружаю, он обрезается до 44k. Я понятия не имею, почему ... когда я просматриваю данные в Excel, это сокращается. Я увеличил буфер до 4096, но не кубиками (это, вероятно, не проблема).Файл FTP (.csv) загружается, усекается

я изначально взял следующий код и отлажен его от: Downloading Files Using FTPWebRequest

Любых мыслей оценили! Благодарю.

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

Всегда используйте блокнот тоже смотрите на свой файл CSV, и установить двоичные ложные – meda

+0

Что происходит, если добавить fileStream.Close() только после того, как времени цикла? Или если вы делаете свой буфер настолько большим, чтобы весь файл вписывался в один файл? – rene

+0

@rene> fileStream.Close() работал! браво ... если бы мог, я бы принял ваш ответ, но я думаю, мы не можем принимать комментарии ... спасибо! – nanonerd

ответ

2

Попробуйте этот подход:

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

спасибо человеку. Мне не хватало fileStream.Close(), который вызвал усечение ... логика «while» на самом деле нормально ... – nanonerd