当我在zip中保存多个文件时,我收到此错误“无法访问已关闭的文件”。
这是代码。 zip.Save(NewZipPath);
internal static string UpdateZipFile(string PdfPath, string ZipPath,
string NewZipPath, string docPath)
{
try
{
using (ZipFile zip = ZipFile.Read(ZipPath))
{
FileStream fs = new FileStream(PdfPath, FileMode.Open, FileAccess.Read);
DirectoryInfo Dir = new DirectoryInfo(docPath);
FileInfo[] FileList = Dir.GetFiles("*.*", SearchOption.AllDirectories);
foreach (FileInfo FI in FileList)
{
zip.AddEntry(FI.FullName, fs);
}
// Error at this line if more than one
// files in above directory.
zip.Save(NewZipPath);
fs.Close();
fs.Dispose();
return "- ZIP Generated Successfully !";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
完全例外
System.ObjectDisposedException: Cannot access a closed file.
at System.IO.__Error.FileNotOpen()
at System.IO.FileStream.get_Length()
at Ionic.Zip.ZipEntry.SetInputAndFigureFileLength(Stream& input)
at Ionic.Zip.ZipEntry._WriteEntryData(Stream s)
at Ionic.Zip.ZipEntry._EmitOne(Stream outstream)
at Ionic.Zip.ZipEntry.Write(Stream s)
at Ionic.Zip.ZipFile.Save()
at Ionic.Zip.ZipFile.Save(String fileName)
at RideShare.Utility.UpdateZipFile(String PdfPath,
String ZipPath, String NewZipPath, String docPath) in
感谢。
答案 0 :(得分:0)
我认为这里发生的事情是流“FS”的使用被纠结了。您可以花时间尝试解开它,或者您可以使用更简单的“AddFiles”方法:
搜索“创建包含文件夹中所有文件的zip。”在
http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples
答案 1 :(得分:0)
发生exception
因为AddEntry
使用了FileStram
,而FileStream
结束后会自动关闭..所以它在{{1}期间关闭在第一个文件之后...当有一个文件时没关系 - 但是你的代码为每个文件添加了相同的FileStream Save
...不确定这是你真正想要的......我想你想要通过fs
...
将您的代码更改为:
AddEntry
或者用
替换foreach (FileInfo FI in FileList)
{
zip.AddFile(FI.FullName);
}
循环
foreach