title: Download function failing with file size 1.35gb
body: <p>I have this download function, and it's working great. BUT with a file with filesize of 1.35gb the download stops at 300 Mb, 382, 400mb or 1.27 Gb. What am I doing wrong? <em>(The download function is made this way, because files need to be hidden, and may not be published on the website.)</em></p>
  
  <pre><code>public static void downloadFunction(string filename)
  {
      string filepath = @"D:\texts\New folder\DLfolder\" + filename;
      string contentType = "application/x-newton-compatible-pkg";
  
      Stream iStream = null;
      // Buffer to read 10K bytes in chunk
      //byte[] buffer = new Byte[10000];
      // Buffer to read 1024K bytes in chunk
  
      byte[] buffer = new Byte[1048576];
  
      // Length of the file:
      int length;
  
      // Total bytes to read:
      long dataToRead;
  
      try
      {
          // Open the file.
          iStream = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read);
  
          // Total bytes to read:
          dataToRead = iStream.Length;
          HttpContext.Current.Response.ContentType = contentType;
          HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
          HttpContext.Current.Response.AddHeader("Content-Length", iStream.Length.ToString());
  
          // Read the bytes.
          while (dataToRead &gt; 0)
          {
              // Verify that the client is connected.
              if (HttpContext.Current.Response.IsClientConnected)
              {
                  // Read the data in buffer.
                  length = iStream.Read(buffer, 0, 10000);
  
                  // Write the data to the current output stream.
                  HttpContext.Current.Response.OutputStream.Write(buffer, 0, length);
  
                  // Flush the data to the HTML output.
                  HttpContext.Current.Response.Flush();
  
                  buffer = new Byte[10000];
                  dataToRead = dataToRead - length;
              }
              else
              {
                  // Prevent infinite loop if user disconnects
                  dataToRead = -1;
              }
          }
      }
      catch (Exception ex)
      {
          // Trap the error, if any.
          HttpContext.Current.Response.Write("Error : " + ex.Message + "&lt;br /&gt;");
  
          HttpContext.Current.Response.ContentType = "text/html";
          HttpContext.Current.Response.Write("Error : file not found");
      }
      finally
      {
          if (iStream != null)
          {
              //Close the file.
              iStream.Close();
          }
          HttpContext.Current.Response.End();
          HttpContext.Current.Response.Close();
      }
  } 
  </code></pre>