I am using the SharpZipLib open source .net library from http://www.icsharpcode.net
My goal is to unzip an xml file and read it into a dataset. However I get the following error reading the file into a dataset: ‘Data at the root level is invalid. Line 1, position 1.’ I believe what is happening is the unzipping code is not releasing the file for the following reasons.
1.) If I unzip the file and exit the application. When I restart the app I CAN read the unzipped file into a dataset. 2.) If I read in the xml file right after writing it out (no zipping) then it works fine.
3.) If I write the dataset to xml, zip it up, unzip it, then attempt to read it back in I get the exception.
The code below is pretty straight forward. UnZipFile will return the name of the file just unzipped. Right below this call is the call to read it into a dataset. The variable fileToRead is the full path to the newly unzipped xml file.
string fileToRead = UnZipFile(filepath, DOViewerUploadStoreArea); ds.ReadXml(fileToRead ) private string UnZipFile(string file, string dirToUnzipTo) { string unzippedfile = ''; try { ZipInputStream s = new ZipInputStream(File.OpenRead(file)); ZipEntry myEntry; string tmpEntry = String.Empty; while ((myEntry = s.GetNextEntry()) != null) { string directoryName = dirToUnzipTo; string fileName = Path.GetFileName(myEntry.Name); string fileWDir = directoryName + fileName; unzippedfile = fileWDir; FileStream streamWriter = File.Create(fileWDir); int size = 4096; byte[] data = new byte[4096]; while (true) { size = s.Read(data, 0, data.Length); if (size > 0) { streamWriter.Write(data, 0, size); } else { break; } } streamWriter.Close(); } s.Close(); } catch (Exception ex) { LogStatus.WriteErrorLog(ex, 'ERROR', 'DOViewer.UnZipFile'); } return (unzippedfile); }
Well, what does the final file look like? (compared to the original). You don’t show the zipping code, which might be part of the puzzle, especially as you are partially swallowing the exception.
I would also try ensuring everything
IDisposableisDispose()d, ideally viausing; also – in case the problem is with path construction, usePath.Combine. And note that ifmyEntry.Namecontains sub-directories, you will need to create them manually.Here’s what I have – it works for unzipping ICSharpCode.SharpZipLib.dll:
It could also be that the problem is either in the code that writes the zip, or the code that reads the generated file.