TastyDomainDriven.File.FileRecord.WriteContentToStream C# (CSharp) Method

WriteContentToStream() public method

public WriteContentToStream ( Stream stream ) : void
stream Stream
return void
        public void WriteContentToStream(Stream stream)
        {
            using (var sha1 = new SHA1Managed())
            {
                // version, ksz, vsz, key, value, sha1
                using (var memory = new MemoryStream())
                {
                    using (var crypto = new CryptoStream(memory, sha1, CryptoStreamMode.Write))
                    using (var binary = new BinaryWriter(crypto, Encoding.UTF8))
                    {
                        binary.Write(this.Version);
                        binary.Write(this.Name);
                        binary.Write(this.Bytes.Length);
                        binary.Write(this.Bytes);
                    }
                    var bytes = memory.ToArray();

                    stream.Write(bytes, 0, bytes.Length);
                }
                this.Hash = sha1.Hash;

                stream.Write(sha1.Hash, 0, sha1.Hash.Length);
            }
        }

Usage Example

Ejemplo n.º 1
0
        /// <summary>
        /// Extract the masterstream to mimic the folder structure the AzureAsyncAppender
        /// </summary>
        /// <returns></returns>
        public async Task ExtractMasterStream(DirectoryInfo output, IAppenderNamingPolicy namingPolicy, long afterVersion, int maxCount, bool writeIndexFile = true)
        {
            var events = await this.ReadRecords(afterVersion, maxCount);

            var versions = new Dictionary <string, int>();

            var rootindex = new FileInfo(Path.Combine(output.FullName, namingPolicy.GetIndexPath("master")));

            if (!output.Exists)
            {
                output.Create();
            }

            using (var masterindexwriter = new StreamWriter(System.IO.File.OpenWrite(rootindex.FullName)))
            {
                foreach (var @event in events)
                {
                    var streampath = namingPolicy.GetStreamPath(@event.Name);
                    var filename   = new FileInfo(Path.Combine(output.FullName, streampath));

                    if (!versions.ContainsKey(@event.Name))
                    {
                        versions[@event.Name] = 1;
                    }
                    else
                    {
                        versions[@event.Name]++;
                    }

                    var record = new FileRecord(@event.Data, @event.Name, versions[@event.Name]);

                    if (!filename.Directory.Exists)
                    {
                        filename.Directory.Create();
                    }

                    using (var fs = System.IO.File.OpenWrite(filename.FullName))
                    {
                        record.WriteContentToStream(fs);
                    }

                    if (writeIndexFile)
                    {
                        var indexfile = Path.Combine(output.FullName, namingPolicy.GetIndexPath(@event.Name));

                        var hash = string.Join("", record.Hash.Select(x => x.ToString("x2")));

                        FileStream fileStream = System.IO.File.Exists(indexfile) ? System.IO.File.Open(indexfile, FileMode.Append, FileAccess.Write) : System.IO.File.Create(indexfile);
                        using (var streamindex = new StreamWriter(fileStream))
                        {
                            streamindex.WriteLine(String.Join("\t", record.Name, record.Version, hash, streampath));
                            masterindexwriter.WriteLine(String.Join("\t", record.Name, record.Version, hash, streampath));
                            streamindex.Flush();
                        }
                    }
                }

                masterindexwriter.Flush();
            }
        }
All Usage Examples Of TastyDomainDriven.File.FileRecord::WriteContentToStream