无法访问ASP.Net中的已关闭文件(保存zip文件中的文件)

时间:2011-08-22 21:11:48

标签: c# asp.net filestream zipfile dotnetzip

当我在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 

感谢。

2 个答案:

答案 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