Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does any one know about this error: "Wrong Local header signature: 0x6D74683C"?

The following code is used to download a zip file and unzip it on phone.

The same code used to work on WP7, I started tested on WP8 device, and strange thing is happening... now it works on WP8 but NOT on WP7 anymore.

On the WP7 it gives an ERROR:

Wrong Local header signature: 0x6D74683C

Could someone tell me what's wrong here?

THE OBSERVATION (2 days after posting the question)

I have some observations.... Sharing here in detail (Image format) or (Excel format)

THE CODE

using ICSharpCode.SharpZipLib.Zip;
using System;
using System.Diagnostics;
using System.IO;
using System.IO.IsolatedStorage;
using System.Net;

namespace iq_main.Network
{

    public class IQ_Download
    {
        private string zipFilePassword = String.Empty;
        private string fileNameToBeStoredAs = String.Empty;
        private string urlToBeDownloaded = String.Empty;
        private HttpWebResponse response;

        public void Download(string _urlToBeDownloaded = GlobalConstants.DownloadLanguageConfigurationUrl, string _fileNameToBeStoredAs = GlobalConstants.DownloadLanguageConfigurationXmlFilename, string _zipFilePassword = GlobalConstants.DownloadZipsPassword)
        {

            urlToBeDownloaded = _urlToBeDownloaded; 
            fileNameToBeStoredAs = _fileNameToBeStoredAs;
            zipFilePassword = _zipFilePassword;

            System.Uri targetUri = new System.Uri(urlToBeDownloaded);
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);

            request.BeginGetResponse(new AsyncCallback(WebRequestCallBack), request);
        }


        void WebRequestCallBack(IAsyncResult result)
        {
            HttpWebRequest resultInfo = (HttpWebRequest)result.AsyncState;
            response = (HttpWebResponse)resultInfo.EndGetResponse(result);
            try
            {

                using (StreamReader httpwebStreamReader = new StreamReader(response.GetResponseStream()))
                {
                    //open isolated storage to save files
                    using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        using (ZipInputStream s = new ZipInputStream(httpwebStreamReader.BaseStream))
                        {
                            if (zipFilePassword != String.Empty)
                                s.Password = zipFilePassword;//if archive is encrypted

                            ZipEntry theEntry;
                            try
                            {
//EXCEPTION OCCURS ON THE VERY NEXT LINE (while...)    
                                while ((theEntry = s.GetNextEntry()) != null)
                                {
                                    string directoryName = Path.GetDirectoryName(theEntry.Name);
                                    string fileName = Path.GetFileName(theEntry.Name);
                                    fileName = fileNameToBeStoredAs;

                                    // create directory
                                    if (directoryName.Length > 0)
                                    {
                                        isoStore.CreateDirectory(directoryName);
                                        //Directory.CreateDirectory(directoryName);
                                    }

                                    if (fileName != String.Empty)
                                    {

                                        //save file to isolated storage
                                        using (BinaryWriter streamWriter =
                                                new BinaryWriter(new IsolatedStorageFileStream(theEntry.Name,
                                                FileMode.Create, FileAccess.Write, FileShare.Write, isoStore)))
                                        {

                                            int size = 2048;
                                            byte[] data = new byte[2048];
                                            while (true)
                                            {
                                                size = s.Read(data, 0, data.Length);
                                                if (size > 0)
                                                    streamWriter.Write(data, 0, size);
                                                else
                                                    break;
                                            }
                                        }
                                    }
                                }
                            }
                            catch (ZipException ze)
                            {
                                Debug.WriteLine(ze.Message);
                            }
                        }
                    }
                }
            } //try
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }

        }//WebRequestCallBack Method */
    } //Class ends
}

THE OUTPUT STACK

    Step into: Stepping over method without symbols 'string.operator !='
    Step into: Stepping over method without symbols 'ICSharpCode.SharpZipLib.Zip.ZipInputStream.Password.set'
    Step into: Stepping over method without symbols 'string.operator !='
    Step into: Stepping over method without symbols 'ICSharpCode.SharpZipLib.Zip.ZipInputStream.Password.set'
    Step into: Stepping over method without symbols 'ICSharpCode.SharpZipLib.Zip.ZipInputStream.GetNextEntry'
    A first chance exception of type 'ICSharpCode.SharpZipLib.Zip.ZipException' occurred in SharpZipLib.WindowsPhone7.dll
    Step into: Stepping over method without symbols 'System.Exception.Message.get'
    Step into: Stepping over method without symbols 'System.Diagnostics.Debug.WriteLine'
    Wrong Local header signature: 0x6D74683C
    A first chance exception of type 'ICSharpCode.SharpZipLib.Zip.ZipException' occurred in SharpZipLib.WindowsPhone7.dll
    Wrong Local header signature: 0x6D74683C
like image 224
wafers Avatar asked Apr 27 '13 14:04

wafers


Video Answer


1 Answers

The header code 0x6D74683C corresponds to the ASCII sequence <htm, which I presume is the truncated HTML header in a web page. If you are downloading the content of the .zip archive, then perhaps it means the web server is returning HTML code instead of the intended archive (an error page or something like that). Maybe you should check the HTTP Content-Type header before feeding the stream to the ICSharpCode.SharpZipLib.

like image 128
Leandro Avatar answered Sep 17 '22 19:09

Leandro