2011-06-22 2 views
3

Я пытаюсь загрузить большой файл (более 50 МБ) на свой веб-сервер, но мое приложение зависает при попытке закрыть поток. Если загруженный файл больше 50 МБ, то .Close() заставляет его зависать - никакого сообщения об ошибке вообще, однако файл с размером менее 50 Мб преуспевает.Ftp Загрузка большого файла вызывает приложение VB.Net для зависания Stream.Close()

Что вы предлагаете обойти fstream.Close(), зависающее моим приложением?

Dim target As New Uri(uploadedFilePath) 
Dim fRequest As System.Net.FtpWebRequest = System.Net.WebRequest.Create(target) 
fRequest.Credentials = New System.Net.NetworkCredential(usr, pswd) 
fRequest.KeepAlive = False 
fRequest.Proxy = Nothing 
fRequest.UsePassive = True 
fRequest.UseBinary = True 
fRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 
fRequest.Timeout = 180000 

Dim count As Integer = 0 
Dim readBytes As Integer = 0 
Const bufferLength As Integer = 8192 
Dim buffer As Byte() = New Byte(bufferLength - 1) {} 
Dim fs As FileStream = File.OpenRead(localFileName) 
Dim fStream As Stream = fRequest.GetRequestStream 
Console.WriteLine("Writing bytes to the stream. {0}", String.Format("{0:HH:mm}", Now)) 
Do 
    readBytes = fs.Read(buffer, 0, bufferLength) 
    fStream.Write(buffer, 0, readBytes) 
    count += readBytes 
Loop While readBytes <> 0 
Console.WriteLine("Writing {0} bytes to the stream. {1}", count, String.Format("{0:HH:mm}", Now)) 
fStream.Close() 
Console.WriteLine("fstream Closed {0}", String.Format("{0:HH:mm}", Now)) 

, который дает результат, как:

Writing bytes to the stream. 13:08 

Writing 51391500 bytes to the stream. 13:18 

Примечание последний Console.WriteLine никогда не является выходом.

PS Использование Visual Studio 2010 и .Net Framework 4.0

+0

Можете ли вы успешно выполнить FTP-файл размером более 50 МБ на сервере с помощью обычной клиентской программы FTP? – Femi

+0

Определенно. Регулярно приходится размещать файл 150 Мб - следовательно, желание автоматизировать это - учитывая, что другая функция этого приложения состоит в том, чтобы сгенерировать этот файл размером 150 МБ. – Nigel

+0

Вы нашли решение этой проблемы. Я разрываю волосы, пытаясь найти решение! –

ответ

0

Так что же, сам файл прибудет на FTP? Если это так, обходным путем было бы просто сократить процесс в данный данный момент и оставить его.

Вы пытались возиться с настройками?

0

Думаю, вам просто нужно увеличить таймаут.

Поместите Try-Catch вне цикла в ловушку ошибка возвращается, вы можете обнаружить ошибки:

Базовое соединение закрыто

Надежда, что помогает!

1

Я заметил, что вы не закрыли входной поток (fs). У меня есть процесс, который FTPs файл, а затем переводит его в «успешную» папку. Поскольку fs не был закрыт, я получил «файл, используемый другим процессом», когда я попытался его переместить. Я поймал его в Try-catch. Я не уверен, что это так, так как вы утверждаете, что файлы на 50 МБ успешны, но это мысль.

Я собираюсь положить в fs.close() и посмотреть, не заботится ли о моей ошибке. Я переместил файл размером 189 МБ, который занял некоторое время с подключением, которое я использовал ... но он, похоже, работал вплоть до переезда.

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