public TextContainer([NotNull] BinaryContainer rawData, [CanBeNull] Encoding encoding = null) { if (rawData == null) { throw new ArgumentNullException(nameof(rawData)); } mRawData = rawData; mEncoding = encoding; }
public void Write(StringKey key, BinaryContainer data) { if (IsReadOnly) { throw new NotSupportedException($"This storage instance (\"{this}\") does not allow write operations."); } using (var target = Open(key).Write()) { data.Copy(target); } }
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)); }
bool IDictionary <string, BinaryContainer> .TryGetValue(string key, out BinaryContainer value) { var k = new StringKey(key); if (!Exists(k)) { value = null; return(false); } value = this[k.ToString()]; return(true); }
void IDictionary <string, BinaryContainer> .Add(string key, BinaryContainer value) => this[key] = value;