/// <returns>New ETag</returns> private string WriteToStream(MetadataPrefixStream stream, object item, Type type, IDataSerializer serializer = null) { byte[] result; using (var resultStream = new MemoryStream()) { (serializer ?? _defaultSerializer).Serialize(item, resultStream, type); result = resultStream.ToArray(); } stream.Seek(0, SeekOrigin.Begin); stream.Write(result, 0, result.Length); stream.SetLength(result.Length); stream.Seek(0, SeekOrigin.Begin); return(stream.WriteNewETag()); }
private string WriteToStream(MetadataPrefixStream stream, Stream item) { byte[] result; using (var resultStream = new MemoryStream()) { item.Position = 0; item.CopyTo(resultStream); result = resultStream.ToArray(); } stream.Seek(0, SeekOrigin.Begin); stream.Write(result, 0, result.Length); stream.SetLength(result.Length); stream.Seek(0, SeekOrigin.Begin); return(stream.WriteNewETag()); }
public Maybe <Stream> GetBlobStream(string containerName, string blobName, out string etag) { var path = Path.Combine(_root, containerName, blobName); try { var file = new FileInfo(path); if (!file.Exists) { etag = null; return(Maybe <Stream> .Empty); } using (var stream = file.OpenRead()) using (var epStream = new MetadataPrefixStream(stream)) { etag = epStream.ReadETag(); int length = (int)epStream.Length; epStream.Seek(0, SeekOrigin.Begin); var returnStream = new MemoryStream(length); byte[] buffer = new byte[8192]; int bytesRead = 1; while (length > 0 && bytesRead > 0) { bytesRead = epStream.Read(buffer, 0, Math.Min(length, buffer.Length)); returnStream.Write(buffer, 0, bytesRead); length -= bytesRead; } returnStream.Position = 0; return(new Maybe <Stream>(returnStream)); } } catch (FileNotFoundException) { etag = null; return(Maybe <Stream> .Empty); } catch (DirectoryNotFoundException) { etag = null; return(Maybe <Stream> .Empty); } }