首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#中以编程方式创建新条目后,什么会导致zip文件中的“丢失或损坏的标题”?

在c#中以编程方式创建新条目后,什么会导致zip文件中的“丢失或损坏的标题”?
EN

Stack Overflow用户
提问于 2019-07-11 10:27:44
回答 1查看 704关注 0票数 0

我正在尝试创建一个zip文件,然后以编程方式在C#中添加2个新条目(xml和csv文件)。但是我成功地编写了第一个条目,之后由于某种原因,我的zip文件被破坏了(更准确地说,它会导致丢失或损坏的标题)。

因此,当它试图打开已经存在的zip文件以便写入第二个条目时,会引发异常。

引发的异常:

“System.IO.InvalidDataException”在System.IO.Compression.FileSystem.dll中(“无法找到中央目录记录的末尾”)。

代码语言:javascript
复制
    if (Path.GetExtension(fileName) == ".zip")
    {
        m_fsOutput = new FileStream(fileName, FileMode.Create);
        m_zipFile = new ZipArchive(m_fsOutput, ZipArchiveMode.Create, true);

        ZipArchiveEntry CSVentry = m_zipFile.CreateEntry(String.Format(CultureInfo.InvariantCulture, "Test{0}.csv", testCells.ElementAt(0).Test), CompressionLevel.Optimal);
        m_fsFileWriter = new StreamWriter(CSVentry.Open());
    }

这是我为第一个条目初始化zip文件和streamWriter的地方。基本上,m_fsFileWriterStreamWriter的一种类型,我使用这个对象在其他地方编写文件。

EN

回答 1

Stack Overflow用户

发布于 2019-07-11 12:24:55

几周前我不得不做一些类似的事情。我使用的代码是:

代码语言:javascript
复制
List<FileStream> FilesList = new List<FileStream>();
//Add your files
using (var archive = new ZipArchive(outStream, ZipArchiveMode.Create, true))
{
    int i = 0;
    foreach (var FileStream in FilesList)
    {
        string fileName = "File"+i;
        var fileInArchive = archive.CreateEntry(fileName, CompressionLevel.Optimal);
        using (var entryStream = fileInArchive.Open())
        {

            entryStream.Flush();
            FileStream.CopyTo(entryStream);
            FileStream.Flush();

        }
        i++;
    }

}
var path = "your path";
using (var fileStream = new FileStream(path, FileMode.Create))
{
    outStream.Seek(0, SeekOrigin.Begin); 

    outStream.CopyTo(fileStream);
}

FilesList是要添加到zip归档中的文件流。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56987139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档