Creating Directories in a ZipArchive C# .Net 4.5

后端 未结 8 1922
星月不相逢
星月不相逢 2020-12-03 10:06

A ZipArchive is a collection of ZipArchiveEntries, and adding/removing \"Entries\" works nicely. But it appears there is no notion of directories / nested \"Archives\". In t

8条回答
  •  青春惊慌失措
    2020-12-03 10:23

    Here is one possible solution:

    public static class ZipArchiveExtension
    {
        public static ZipArchiveDirectory CreateDirectory(this ZipArchive @this, string directoryPath)
        {
            return new ZipArchiveDirectory(@this, directoryPath);
        }
    }
    
    public class ZipArchiveDirectory
    {
        private readonly string _directory;
        private ZipArchive _archive;
    
        internal ZipArchiveDirectory(ZipArchive archive, string directory)
        {
            _archive = archive;
            _directory = directory;
        }
    
        public ZipArchive Archive { get{return _archive;}}
    
        public ZipArchiveEntry CreateEntry(string entry)
        {
            return _archive.CreateEntry(_directory + "/" + entry);
        }
    
        public ZipArchiveEntry CreateEntry(string entry, CompressionLevel compressionLevel)
        {
            return _archive.CreateEntry(_directory + "/" + entry, compressionLevel);
        }
    }
    

    and used:

    var directory = _archive.CreateDirectory(context);
    var entry = directory.CreateEntry(context);
    var stream = entry.Open();
    

    but I can foresee problems with nesting, perhaps.

提交回复
热议问题