Solved

C# How to download large files?

Posted on 2009-05-06
8
4,100 Views
Last Modified: 2013-12-17
I wrote file downloader but it doesn't work with bigger files like 100mb...
have problem in this line:
iByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)
error:
Unable to read data from the transport connection.. no space for buffer etc

when i trying to make this buffer smaller
byte[] byteBuffer = new byte[655336];
it doesn't works too ;/
what I should change in my code to download bigger files?
have you know any good examples to download large files using httpwebresponse?
thx

best regards
// the URL to download the file from

            string sUrlToReadFileFrom = _dl;    

            // the path to write the file to

            Uri _uri = new Uri(_dl);

            string sFilePathToWriteFileTo = _path+Path.GetFileName(_uri.AbsolutePath);
 

            // first, we need to get the exact size (in bytes) of the file we are downloading    

            Uri url = new Uri(sUrlToReadFileFrom);    

            System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);    

            System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();    

            response.Close();    

            // gets the size of the file in bytes    

            Int64 iSize = response.ContentLength;
 

            // keeps track of the total bytes downloaded so we can update the progress bar    

            Int64 iRunningByteTotal = 0;
 

            // use the webclient object to download the file    

            using (System.Net.WebClient client = new System.Net.WebClient())

            {

                // open the file at the remote URL for reading        

                using (System.IO.Stream streamRemote = client.OpenRead(new Uri(sUrlToReadFileFrom)))

                {

                    // using the FileStream object, we can write the downloaded bytes to the file system            

                    using (Stream streamLocal = new FileStream(sFilePathToWriteFileTo, FileMode.Create, FileAccess.Write, FileShare.None))

                    {

                        // loop the stream and get the file into the byte buffer                

                        int iByteSize = 0;                

                        byte[] byteBuffer = new byte[iSize];

                        while ((iByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0)

                        {

                            // write the bytes to the file system at the file path specified                    

                            streamLocal.Write(byteBuffer, 0, iByteSize);                    

                            iRunningByteTotal += iByteSize;                     

                            // calculate the progress out of a base "100"                    

                            double dIndex = (double)(iRunningByteTotal);                    

                            double dTotal = (double)byteBuffer.Length;                    

                            double dProgressPercentage = (dIndex / dTotal);                    

                            int iProgressPercentage = (int)(dProgressPercentage * 100);                     

                            

                            // update the progress bar                    

                            backgroundWorker1.ReportProgress(iProgressPercentage);

                        }

                        // clean up the file stream                

                        streamLocal.Close();

                    }

                    // close the connection to the remote server            

                    streamRemote.Close();

                }

            }

Open in new window

0
Comment
Question by:F0x88
  • 4
  • 3
8 Comments
 
LVL 13

Expert Comment

by:copyPasteGhost
ID: 24314367
0
 
LVL 2

Author Comment

by:F0x88
ID: 24314553
no it doesn't help me
0
 
LVL 13

Expert Comment

by:copyPasteGhost
ID: 24314613
0
 
LVL 2

Author Comment

by:F0x88
ID: 24314876
still it's not it problem is with buffer is so big but with my own set buffersize it breaks
0
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 
LVL 16

Expert Comment

by:CuteBug
ID: 24315472
0
 
LVL 2

Author Comment

by:F0x88
ID: 24316676
i know this one is so big project i need simple solution my code needs few small changes to make buffer for example 1024 and download all file, it can't be that hard
0
 
LVL 13

Accepted Solution

by:
copyPasteGhost earned 500 total points
ID: 24316703
0
 
LVL 2

Author Comment

by:F0x88
ID: 24317060
I found why my app broke with custom buffer, I changed not this parametr what i should
thx for help
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now