public ClaimsSetMetadata(byte[] data) { var pacStream = new NdrBinaryReader(data); Header = new RpcHeader(pacStream); ClaimSetSize = pacStream.ReadInt(); pacStream.Seek(4); CompressionFormat = (CompressionFormat)pacStream.ReadInt(); UncompressedClaimSetSize = pacStream.ReadInt(); ReservedType = pacStream.ReadShort(); ReservedFieldSize = pacStream.ReadInt(); pacStream.Align(8); var size = pacStream.ReadInt(); if (size != ClaimSetSize) { throw new InvalidDataException($"Data length {size} doesn't match expected ClaimSetSize {ClaimSetSize}"); } var claimSet = pacStream.Read(ClaimSetSize); if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE) { claimSet = Compressions.Decompress(claimSet, UncompressedClaimSetSize, CompressionFormat); } ClaimsSet = new ClaimsSet(claimSet); ReservedField = pacStream.Read(ReservedFieldSize); }
public override void ReadBody(NdrBinaryStream Stream) { ClaimSetSize = Stream.ReadInt(); Stream.Seek(4); CompressionFormat = (CompressionFormat)Stream.ReadInt(); UncompressedClaimSetSize = Stream.ReadInt(); ReservedType = Stream.ReadShort(); ReservedFieldSize = Stream.ReadInt(); Stream.Align(8); var size = Stream.ReadInt(); if (size != ClaimSetSize) { throw new InvalidDataException($"Data length {size} doesn't match expected ClaimSetSize {ClaimSetSize}"); } var claimSet = Stream.ReadSpan(ClaimSetSize); if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE) { claimSet = Compressions.Decompress(claimSet, UncompressedClaimSetSize, CompressionFormat); } ClaimsSet = new ClaimsSet(); ClaimsSet.Decode(claimSet.AsMemory()); ReservedField = Stream.Read(ReservedFieldSize); }
private ClaimsSet UnmarshalClaimsSet(ReadOnlyMemory <byte> claimSet) { if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE) { claimSet = Compressions.Decompress(claimSet.Span, UncompressedClaimSetSize, CompressionFormat); } var claimsSet = new ClaimsSet(); new NdrBuffer(claimSet).UnmarshalObject(claimsSet); return(claimsSet); }
private ClaimsSet UnmarshalClaimsSet(ReadOnlyMemory <byte> claimSet) { if (this.CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE) { claimSet = Compressions.Decompress(claimSet.Span, this.UncompressedClaimSetSize, this.CompressionFormat); } var claimsSet = new ClaimsSet(); using (var buffer = new NdrBuffer(claimSet)) { buffer.UnmarshalObject(claimsSet); } return(claimsSet); }
private static ReadOnlySpan <byte> Compress(ClaimsSet claimsSet, CompressionFormat compressionFormat, out int originalSize) { var buffer = new NdrBuffer(); buffer.MarshalObject(claimsSet); ReadOnlySpan <byte> encoded = buffer.ToSpan(alignment: 8); originalSize = encoded.Length; if (compressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE) { encoded = Compressions.Compress(encoded, compressionFormat); } return(encoded); }
private static ReadOnlySpan <byte> Compress(ClaimsSet claimsSet, CompressionFormat compressionFormat, out int originalSize) { var stream = new NdrBinaryStream(); claimsSet.Encode(stream); var encoded = stream.ToSpan(); originalSize = encoded.Length; if (compressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE) { encoded = Compressions.Compress(encoded, compressionFormat); } return(encoded); }
void CargarHistorial() { string Historial = Path.GetFullPath("Datos LZW\\" + "Historial.txt"); FileStream ArchivoHistotial = new FileStream(Historial, FileMode.OpenOrCreate); StreamReader reader = new StreamReader(ArchivoHistotial); string Texto = reader.ReadToEnd(); string[] Archivos = Texto.Split('~'); int Posicion = 0; if (Archivos.Length > 1) { while (Archivos.Length > Posicion + 1) { Compressions NuevoArchivo = new Compressions(); // 0-> Nombre Original if (Archivos[Posicion].Contains("\r\n")) { NuevoArchivo.NombreOriginal = Archivos[Posicion++].Substring(2); } else { NuevoArchivo.NombreOriginal = Archivos[Posicion++]; } // 1 -> Peso de Original int SizeOriginal = Convert.ToInt32(Archivos[Posicion++]); // 2 -> Nombre Comprimido NuevoArchivo.NombreComprimido = Archivos[Posicion++]; // 3 -> Peso Comprimido int SizeComprimido = Convert.ToInt32(Archivos[Posicion++]); DicCompress.Add(NuevoArchivo.NombreOriginal, NuevoArchivo.NombreComprimido); DicDecompress.Add(NuevoArchivo.NombreComprimido, NuevoArchivo.NombreOriginal); NuevoArchivo.RazonCompresion = (double)SizeComprimido / SizeOriginal; NuevoArchivo.FactorCompresion = (double)SizeOriginal / SizeComprimido; NuevoArchivo.PorcentajeReduccion = (double)NuevoArchivo.FactorCompresion * 100; NuevoArchivo.RutaComprimido = Path.GetFullPath("Archivos Compress\\" + NuevoArchivo.NombreComprimido); ListArchivos.Add(NuevoArchivo); } } reader.Close(); ArchivoHistotial.Close(); }
public IActionResult Compress([FromForm] IFormFile file, [FromRoute] string name) { try { Compressions NuevoArchivo = new Compressions(); string RutaOriginal = Path.GetFullPath("Archivos Originales\\" + file.FileName); string RutaCompresion = Path.GetFullPath("Archivos Compress\\" + name + ".lzw"); FileStream ArchivoOriginal = new FileStream(RutaOriginal, FileMode.OpenOrCreate); file.CopyTo(ArchivoOriginal); ArchivoOriginal.Close(); Compresor.Comprimir(RutaOriginal, RutaCompresion); FileInfo Original = new FileInfo(RutaOriginal); FileInfo Comprimido = new FileInfo(RutaCompresion); NuevoArchivo.NombreOriginal = file.FileName; NuevoArchivo.NombreComprimido = name + ".lzw"; if (!DicCompress.ContainsKey(NuevoArchivo.NombreOriginal)) { DicCompress.Add(NuevoArchivo.NombreOriginal, NuevoArchivo.NombreComprimido); DicDecompress.Add(NuevoArchivo.NombreComprimido, NuevoArchivo.NombreOriginal); NuevoArchivo.RazonCompresion = (double)Comprimido.Length / Original.Length; NuevoArchivo.FactorCompresion = (double)Original.Length / Comprimido.Length; NuevoArchivo.PorcentajeReduccion = (double)NuevoArchivo.FactorCompresion * 100; NuevoArchivo.RutaComprimido = Path.GetFullPath("Archivos Compress\\" + NuevoArchivo.NombreComprimido); ListArchivos.Add(NuevoArchivo); string Historial = Path.GetFullPath("Datos LZW\\" + "Historial.txt"); StreamWriter writer = new StreamWriter(Historial, true); string Texto = NuevoArchivo.NombreOriginal + "~" + Original.Length + "~" + NuevoArchivo.NombreComprimido + "~" + Comprimido.Length + "~"; writer.WriteLine(Texto); writer.Close(); } FileStream ArchivoFinal = new FileStream(RutaCompresion, FileMode.Open); FileStreamResult FileFinal = new FileStreamResult(ArchivoFinal, "text/lzw"); return(FileFinal); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public List <Compressions> Get() { Compressions ResultCompress = new Compressions(); return(ResultCompress.DataCompressions()); }