I'm trying to write a windows app that will download files from a server. It is working fine for small files, but not the larger ones (50Mb+)- I get the error "An operation on a socket could not be performed because the system lacked
sufficient buffer space or because a queue was full."
This is the code I am using:
If I can modify this method to work, then great. Otherwise, any ideas as to what I should be doing?Code:Private Function DownloadFile(ByVal fileSource As String, _ ByVal fileDestination As String, _ ByVal WebRequestType As String) As Boolean Dim myHttpWebRequest As HttpWebRequest Dim myHttpWebResponse As HttpWebResponse Dim myFileWebRequest As FileWebRequest Dim myFileWebResponse As FileWebResponse Dim myStream As Stream Dim bufferSize As Integer Dim inBuf() As Byte Dim bytesToRead As Integer Dim bytesRead As Integer = 0 Dim myFileStream As FileStream Dim n As Integer Dim folderDestination As String 'Dim PercentageComplete As Integer Dim clsUtils As New clsUtilities Try If WebRequestType = "HTTP" Then myHttpWebRequest = CType(WebRequest.Create(fileSource), HttpWebRequest) myHttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse) myStream = myHttpWebResponse.GetResponseStream() bufferSize = myHttpWebResponse.ContentLength Else 'File myFileWebRequest = CType(WebRequest.Create(fileSource), FileWebRequest) myFileWebResponse = CType(myFileWebRequest.GetResponse(), FileWebResponse) myStream = myFileWebResponse.GetResponseStream() bufferSize = myFileWebResponse.ContentLength End If 'MsgBox("bufferSize=" & bufferSize) 'Set buffer size ReDim inBuf(bufferSize) bytesToRead = CInt(inBuf.Length) 'Set up progressbar ResetLoadingPanel() DownloadProgressBar.Maximum = bufferSize While bytesToRead > 0 n = myStream.Read(inBuf, bytesRead, bytesToRead) If n = 0 Then Exit While End If bytesRead += n bytesToRead -= n 'Update progress bar DownloadProgressBar.Step = n DownloadProgressBar.PerformStep() 'Update Loading Panel UpdateLoadingPanel(DownloadProgressBar.Value, DownloadProgressBar.Maximum) End While 'Remove existing files If Not clsUtils.FileExists(fileDestination) Then WriteToInstallInfo("File already exists. Deleting...", True, True) File.Delete(fileDestination) WriteToInstallInfo("...deleted ", False, False) End If 'Create folder if required folderDestination = clsUtils.FolderFromFileName(fileDestination) If Not clsUtils.FolderExists(folderDestination) Then WriteToInstallInfo("Creating folder '" & folderDestination & "' ... ", True, True) Directory.CreateDirectory(folderDestination) WriteToInstallInfo("... created ", False, False) End If myFileStream = New FileStream(fileDestination, FileMode.OpenOrCreate, FileAccess.Write) myFileStream.Write(inBuf, 0, bytesRead) myStream.Close() myFileStream.Close() WriteToInstallInfo("...download successful.", True, True) Return True Catch ex As Exception WriteToInstallInfo("**ERROR** DownloadFile:" & ex.Message, True, True) Return False End Try End Function




Reply With Quote