Click here to Skip to main content
15,879,095 members
Please Sign up or sign in to vote.
4.00/5 (2 votes)
See more:
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

C#
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
Comments
krumia 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 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

Try altering following lines:

C#
// Length of the file:
int length;
.
.
.
// Read the data in buffer.
length = iStream.Read(buffer, 0, 10000);


to

C#
// 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.
 
Share this answer
 
Response.flush method causes a run-time error if Response.Buffer has not been set to TRUE.
try adding Response.Buffer= true
 
Share this answer
 

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900