Пример #1
0
        public override void WriteVcsToRaw(string vcsdir, Stream zipEntryStream)
        {
            //zip up the header bytes
            //using (var stream = new MemoryStream())
            // using (var stream = zipEntry.Open())
            using (var writer = new BinaryWriter(zipEntryStream))
            {
                using (var zipStream = new MemoryStream())
                {
                    using (var mashupZipArchive = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
                    {
                        var order = _fileSystem.File.ReadAllLines(Path.Combine(vcsdir, ".zo"));
                        foreach (var name in order)
                        {
                            var converter      = FindConverter(name);
                            var mashupZipEntry = mashupZipArchive.CreateEntry(name.Replace('/', '\\'), CompressionLevel.Optimal);
                            using (var mashupStream = mashupZipEntry.Open())
                            {
                                converter.WriteVcsToRaw(Path.Combine(vcsdir, name.Replace('/', '\\')), mashupStream);
                            }
                        }
                    }

                    //Write header
                    writer.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 });

                    //write zip
                    zipStream.Flush();
                    zipStream.Seek(0, SeekOrigin.Begin);
                    writer.Write((int)zipStream.Length);
                    zipStream.WriteTo(zipEntryStream);
                }

                using (var xmlStream1 = new MemoryStream())
                {
                    using (var file = _fileSystem.File.Open(Path.Combine(vcsdir, "3.xml"), FileMode.Open))
                    {
                        var xmlb = new XMLConverter(new UTF8Encoding(true), _fileSystem, false).VcsToRaw(file);
                        //xmlb.Length
                        xmlb.Seek(0, SeekOrigin.Begin);
                        xmlb.CopyTo(xmlStream1);
                        xmlStream1.Seek(0, SeekOrigin.Begin);
                    }

                    writer.Write((int)xmlStream1.Length);
                    writer.Write(xmlStream1.ToArray());
                }

                using (var xmlStream2 = new MemoryStream())
                {
                    using (var file = _fileSystem.File.Open(Path.Combine(vcsdir, "6.xml"), FileMode.Open))
                    {
                        using (var xmlb = new XMLConverter(new UTF8Encoding(false), _fileSystem, false).VcsToRaw(file))
                        {
                            xmlb.CopyTo(xmlStream2);
                        }
                    }

                    writer.Write((int)xmlStream2.Length + 34);
                    writer.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 });
                    writer.Write(xmlStream2.ToArray());
                }

                new NoopConverter(_fileSystem).WriteVcsToRaw(Path.Combine(vcsdir, "7.bytes"), zipEntryStream);
            }
        }