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); } }
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); }
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!"); }
private static void SerializePkgHeader(PkgHeader header, GZipStream gz) { var bytes = Encoding.UTF8.GetBytes(SimpleJson.SerializeObject(header)); gz.Write(bytes, 0, bytes.Length); }