【发布时间】:2008-12-03 22:11:11
【问题描述】:
我正在使用来自www.icsharpcode.net 的 SharpZipLib 开源 .net 库
我的目标是解压缩 xml 文件并将其读入数据集。但是,将文件读入数据集时出现以下错误:“根级别的数据无效。第 1 行,位置 1。” 我相信正在发生的事情是由于以下原因,解压缩代码没有释放文件。
1.) 如果我解压缩文件并退出应用程序。当我重新启动应用程序时,我可以将解压缩的文件读入数据集中。
2.) 如果我在写出 xml 文件后立即读取它(没有压缩),那么它工作正常。
3.)如果我将数据集写入 xml,将其压缩,解压缩,然后尝试将其读回我得到异常。
下面的代码非常简单。 UnZipFile 将返回刚刚解压缩的文件的名称。在此调用的正下方是将其读入数据集的调用。变量 fileToRead 是新解压的 xml 文件的完整路径。
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);
}
【问题讨论】: