Ejemplo n.º 1
0
Archivo: NZip.cs Proyecto: smeoow/Naive
        void init()
        {
            stream.Position = posOffset;
            var headerbegin = BitConverter.ToInt32(readbytes(stream, sizeof(int)), 0);

            header = DeserialzePkgHeader(headerbegin);
            files  = new Hashtable(header.Files.Length);
            foreach (var item in header.Files)
            {
                files.Add(item.name, item);
            }
        }
Ejemplo n.º 2
0
Archivo: NZip.cs Proyecto: smeoow/Naive
        private PkgHeader DeserialzePkgHeader(int headerbegin)
        {
            stream.Position = headerbegin;
            PkgHeader header;

            using (var gz = new GZipStream(stream, CompressionMode.Decompress, true)) {
                var rs   = new StreamReader(gz, Encoding.UTF8);
                var json = rs.ReadToEnd();
                header = SimpleJson.DeserializeObject <PkgHeader>(json);
            }
            posOffset = 0;
            return(header);
        }
Ejemplo n.º 3
0
Archivo: NZip.cs Proyecto: smeoow/Naive
        public static void Create(Stream output, IEnumerable <AddingFile> filesToAdd, TextWriter debugoutput = null)
        {
            var header = new PkgHeader();

            header.NZipMinVersion = 1;
            header.NZipVersion    = 2;
            var files         = new List <NZFileinfo>();
            var beginPosition = output.Position;

            output.Write(BitConverter.GetBytes(-1), 0, sizeof(int));
            int lengthsum = (int)output.Position;
            int i         = 0;

            foreach (var x in filesToAdd)
            {
                var nfi = new NZFileinfo();
                nfi.name = x.name;
                debugoutput?.WriteLine("[{1}/{2}] \"{0}\"", nfi.name, i + 1, (filesToAdd as ICollection)?.Count.ToString() ?? "NaN");
#if NET45
                using (var gz = new GZipStream(output, CompressionLevel.Optimal, true)) {
#else
                using (var gz = new GZipStream(output, CompressionMode.Compress, true)) {
#endif
                    using (var file = x.file()) {
                        nfi.length = file.Length;
                        CopyStream(file, gz);
                    }
                }
                nfi.pos = lengthsum;
                var curPos = (int)output.Position;
                nfi.ziplen = curPos - lengthsum;
                nfi.lwt    = ConvertDateTimeInt(x.lwt);
                files.Add(nfi);
                lengthsum = curPos;
                i++;
            }
            header.Files      = files.ToArray();
            header.CreateTime = ConvertDateTimeInt(DateTime.UtcNow);
            debugoutput?.WriteLine("[Finishing] Writing PkgInfo...");
            using (var ms = new MemoryStream(4 * 1024)) {
                using (var gz = new GZipStream(ms, CompressionMode.Compress, true)) {
                    SerializePkgHeader(header, gz);
                }
                ms.WriteTo(output);
            }

            output.Position = beginPosition;
            output.Write(BitConverter.GetBytes(lengthsum), 0, sizeof(int));
            debugoutput?.WriteLine("Finished!");
        }
Ejemplo n.º 4
0
Archivo: NZip.cs Proyecto: smeoow/Naive
        private static void SerializePkgHeader(PkgHeader header, GZipStream gz)
        {
            var bytes = Encoding.UTF8.GetBytes(SimpleJson.SerializeObject(header));

            gz.Write(bytes, 0, bytes.Length);
        }