使用.NET ZipArchive压缩整个目录以及额外信息

时间:2016-04-26 17:50:14

标签: c# .net ziparchive

我继承了一些利用ZipArchive从数据库中保存一些信息的代码。它使用BinaryFormatter来做到这一点。当您使用7-zip(例如)查看zip文件时,您会看到几个文件夹和一个.txt文件。一切都运作良好。我只想修改代码,在ZipArchive中也有一个名为“temp”的文件夹,它由C:\ temp下的文件和文件夹组成。有没有一种简单的方法来添加由整个文件夹或光盘组成的条目(ZipArchiveEntry?)?我在ZipArchive的成员方法中看到了“CreateEntryFromFile”,但没有CreateEntryFromDirectory。或者还有其他一些简单的方法可以做到这一点?有人有示例代码吗?我应该说C:\ temp可以有可变数量的文件和目录(有子目录和文件等)。我必须以某种方式枚举它们,创建我自己的目录使用CreateEntryFromFile?任何帮助表示赞赏。

同样,当我阅读ZipArchive时,我想获取与C:\ temp相关的内容并将其转储到目录中(如C:\ temp_old) 谢谢, 戴夫

1 个答案:

答案 0 :(得分:0)

Zip folder in C#中的user1469065的回答对我有用。 user1469065显示了如何获取目录中的所有文件/目录(使用一些很酷的" yield"语句),然后进行序列化。为了完整性,我确实添加了反序列化的代码,如user1469065建议的那样(至少我认为我是按照他的建议做的)。

private static void ReadTempFileStuff(ZipArchive archive) // adw
    {
        var sessionArchives = archive.Entries.Where(x => x.FullName.StartsWith(@"temp_directory_contents")).ToArray();
        if (sessionArchives != null && sessionArchives.Length > 0)
        {
            foreach (ZipArchiveEntry entry in sessionArchives)
            {
                FileInfo info = new FileInfo(@"C:\" + entry.FullName);
                if (!info.Directory.Exists)
                {
                    Directory.CreateDirectory(info.DirectoryName);
                }
                entry.ExtractToFile(@"C:\" + entry.FullName,true);
            }
        }
    }