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)); }
[NotNull] public TextReader Read() { var stream = mRawData.Read(); return(new StreamReader(stream, mEncoding ?? Encoding.UTF8)); }