Exemplo n.º 1
0
        public static CompressedBlobStore FromBinaryContainer([NotNull] BinaryContainer container)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            var entries = new List <CompressedBlobStoreEntryInfo>();
            var exists  = true;

            using (var reader = container.Read())
            {
                if (reader.Length == 0)
                {
                    exists = false;
                }
                else
                {
                    using (var readArchive = new ZipArchive(reader, ZipArchiveMode.Read, true))
                    {
                        foreach (var entry in readArchive.Entries)
                        {
                            var path = entry.FullName.Split('\\');
                            if (path.Length == 0)
                            {
                                continue;
                            }

                            var head = path.Length == 1 ? new string[0] : path.Take(path.Length - 1).ToArray();
                            var tail = path.Last();

                            var info = new CompressedBlobStoreEntryInfo
                            {
                                Path = head.Length == 0 ? new StringKeySequence() : new StringKeySequence(head),
                                Key  = new StringKey(tail)
                            };

                            entries.Add(info);
                        }
                    }
                }
            }

            if (!exists)
            {
                using (new ZipArchive(container.ReadWrite(), ZipArchiveMode.Create, false)) { }
            }

            var writeArchive = new ZipArchive(container.ReadWrite(), ZipArchiveMode.Update, false);

            return(new CompressedBlobStore(writeArchive, entries));
        }
Exemplo n.º 2
0
        [NotNull] public TextReader Read()
        {
            var stream = mRawData.Read();

            return(new StreamReader(stream, mEncoding ?? Encoding.UTF8));
        }