简体   繁体   中英

download zip files by use of reader in c#

I have been working on this application that enables user to log in into another website, and then download specified file from that server. So far I have succeeded in logging on the website and download the file. But everything ruins when it comes to zip files.

Is there any chunk of code that could be helpful in reading the .zip files byte by byte or by using stream reader?

I m using downloadfile() but its not returning the correct zip file.

I need a method by which I can read zip files. Can I do it by using ByteReader()

The code used to download zip file is

string filename = "13572_BranchInformationReport_2012-05-22.zip";
            string filepath = "C:\\Documents and Settings\\user\\Desktop\\" + filename.ToString();
            WebClient client = new WebClient();
            string user = "abcd", pass = "password";
            client.Credentials = new NetworkCredential(user, pass);
            client.Encoding = System.Text.Encoding.UTF8;
            try
            {
                client.DownloadFile("https://web.site/archive/13572_BranchInformationReport_2012-05-22.zip", filepath);
                Response.Write("Success");
            }
            catch (Exception ue)
            {
                Response.Write(ue.Message);
            }

Thanks in advance.

is there any chunk of code that could be helpful in reading the zip files bytes by bytes aur by using stream reader.

Absolutely not. StreamReader - and indeed any TextReader is for reading text content, not binary content. A zip file is not text - it's composed of bytes, not characters.

If you're reading binary content such as zip files, you should be using a Stream rather than a TextReader of any kind.

Note that WebClient.DownloadFile and WebClient.DownloadData can generally make things easier for downloading binary content.

Another simple way to downlaod zip file

 <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/DOWNLOAD/Filename.zip">Click To Download</asp:HyperLink>

Another solution

 private void DownloadFile()
    {


        string getPath = "DOWNLOAD/FileName.zip";
        System.IO.Stream iStream = null;

        byte[] buffer = new Byte[1024];

        // Length of the file:
        int length;

        // Total bytes to read:
        long dataToRead;

        // Identify the file to download including its path.
        string filepath = Server.MapPath(getPath);

        // 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;
            // Page.Response.ContentType = "application/vnd.android.package-archive";
            //   Page.Response.ContentType = "application/octet-stream";
            Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

            // 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, 1024);

                    // Write the data to the current output stream.
                    Page.Response.OutputStream.Write(buffer, 0, length);

                    // Flush the data to the HTML output.
                    Page.Response.Flush();

                    //  buffer = new Byte[1024];
                    dataToRead = dataToRead - length;
                }
                else
                {
                    //prevent infinite loop if user disconnects
                    dataToRead = -1;
                }
            }
        }
        catch (Exception ex)
        {
            // Trap the error, if any.
            Page.Response.Write(ex.Message);
        }
        finally
        {
            if (iStream != null)
            {
                //Close the file.
                iStream.Close();
                Page.Response.Close();
            }

        }
    }

Your answer

WebRequest objRequest = System.Net.HttpWebRequest.Create(url);
objResponse = objRequest.GetResponse();
byte[] buffer = new byte[32768];
using (Stream input = objResponse.GetResponseStream())
{
using (FileStream output = new FileStream ("test.doc",
FileMode.CreateNew))
{
int bytesRead;

while ( (bytesRead=input.Read (buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
} 

This is how i achieved it. Thanks everyone for ur help

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM