Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C#Excel
Hello everyone,
 
I am using this code to download file which is working fine in whole application.
I am trying to download Excel file using this code . After download when i try to open excel file, it pop up's a warning that file is corrupted and some data will be removed or lost. After checking i found that the formatting applied on excel is lost.I have tried all ways to do this. Please help me out
 
System.IO.Stream iStream = null;
            // Buffer to read 10K bytes in chunk:
            byte[] buffer = new Byte[10000];
 
            // Length of the file:
            int length;
 
            // Total bytes to read:
            long dataToRead;
 
            // Identify the file to download including its path.
            string filepath = strFileName;
            // Identify the file name.
            string filename = System.IO.Path.GetFileName(filepath);
 
            try
            {
                // Open the file.
                iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
                            System.IO.FileAccess.Read, System.IO.FileShare.Read);
 

                // Total bytes to read:
                dataToRead = iStream.Length;
                //if(strFileName.ToLower().Contains(".xls"))
                //{
                //    Response.ContentType = "application/vnd.ms-excel";
                //}
                //else
                //{
                //    Response.ContentType = "application/octet-stream";
                //}
                Response.AddHeader("Content-Disposition", "inline; filename=" + filename);
                //Response.AddHeader("Content-Length", objFile.Length.ToString());
                Response.ContentType = "application/vnd.ms-excel";
 
                // Read the bytes.
                while (dataToRead > 0)
                {
                    // Verify that the client is connected.
                    if (Response.IsClientConnected)
                    {
                        // Read the data in buffer.
                        length = iStream.Read(buffer, 0, 10000);
 
                        // Write the data to the current output stream.
                        Response.OutputStream.Write(buffer, 0, length);
 
                        // Flush the data to the HTML output.
                        Response.Flush();
 
                        buffer = new Byte[10000];
                        dataToRead = dataToRead - length;
                    }
                    else
                    {
                        //prevent infinite loop if user disconnects
                        dataToRead = -1;
                    }
                }
                Response.End();
            }
            catch (Exception ex)
            {
                // Trap the error, if any.
                Response.Write("Error : " + ex.Message);
            }
            finally
            {
                if (iStream != null)
                {
                    //Close the file.
                    iStream.Close();
                }
                Response.Close();
            }
Posted 7-Jun-12 23:22pm
Comments
krumia at 8-Jun-12 6:02am
   
Did you download the file by normal way and tried to open it? I have a feeling that code works fine, but the file on the server is also corrupt.
deepakdynamite at 8-Jun-12 6:13am
   
I copied file from server to my machine and opened up with correct data and formatting. Even i opened it up on server as well
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Try altering following lines:
 
// Length of the file:
int length;
.
.
.
// Read the data in buffer.
length = iStream.Read(buffer, 0, 10000);
 
to
 
// Length of the file:
int length = 0;
.
.
.
// Read the data in buffer.
length = iStream.Read(buffer, length, 10000);
 
Not guaranteed to work, as I have only run the code in my head.
  Permalink  
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 3

Response.flush method causes a run-time error if Response.Buffer has not been set to TRUE.
try adding Response.Buffer= true
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 459
1 OriginalGriff 441
2 sanket saxena 349
3 Tadit Dash 310
4 Abhinav S 235
0 Sergey Alexandrovich Kryukov 12,109
1 OriginalGriff 7,326
2 Peter Leow 5,013
3 Abhinav S 4,013
4 Maciej Los 3,575


Advertise | Privacy | Mobile
Web03 | 2.8.140421.2 | Last Updated 30 Nov 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Use
Layout: fixed | fluid