2015-08-07 8 views
0

Ниже приведен метод загрузки контента с FTP, но если я просто разрешу программе работать, это не сработает. Если я медленно продвигаюсь по коду, он работает. Если я просто позволю ему работать сам по себе, он загружает только 5 кбайт файла, а затем переходит. Это не исключение, оно просто загружает 5kb, а затем завершает работу, переходя к следующему элементу.Загрузка файла по FTP не удалась (загружает только часть файла)

private static void DownloadFtpFile(string sourceFileLocation) 
    { 
     try 
     { 
       int bufferSize = 1024 * 300; 
       int totalBytes = 0; 
       HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sourceFileLocation); 
       long contentLength = webRequest.GetResponse().ContentLength; 
       Console.WriteLine(totalBytes); 

       using (WebResponse webResponse = webRequest.GetResponse()) 
       using (Stream reader = webResponse.GetResponseStream()) 
       using (BinaryWriter fileWriter = new BinaryWriter(File.Create(Application.StartupPath + "\\" + "tempFldr" + "\\" + "tempFile"))) 
       { 
        int bytesRead = 0; 
        byte[] buffer = new byte[bufferSize]; 
        do 
        { 
         bytesRead = reader.Read(buffer, 0, buffer.Length); 
         totalBytes += bytesRead; 
         fileWriter.Write(buffer, 0, bytesRead); 
         Console.WriteLine("BytesRead: " + bytesRead + " -- TotalBytes: " + totalBytes); 

        } while (bytesRead > 0); 
       } 
      } 
     catch (WebException ex) 
     { 
      String status = ((HttpWebResponse)ex.Response).StatusDescription; 
      Console.WriteLine(status); 
     } 
    } 

ответ

0

Чтобы начать, попробуйте переключиться с HttpWebRequest на FtpWebRequest. Не уверен, что это будет иметь огромное значение, но если вы получаете материал с FTP, это возможно.

Я чувствую, что вы можете изменить с помощью Do-то время, чтобы какое-то время с чем-то вроде этого:

byte[] buffer = new byte[bufferSize]; 
int bytesRead; 
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0) 
{ 
    fileWrite.Write(chunk, 0, bytesRead); 
    totalBytes += bytesRead; 
    Console.WriteLine("BytesRead: " + bytesRead + " -- TotalBytes: " + totalBytes); 
} 

Что-то еще вы можете рассмотреть, может быть, просто загрузите файл в поток, а затем сохранить его файл после того, как вы уже закрыли FTP-соединение.

Смежные вопросы