/// <summary> /// Creates a new stream containing the raw file data of the entry for read access. /// Changes in this new stream will not affect the ArcEntry. /// If an exception occurs, returns null. /// </summary> /// <returns></returns> public override async Task <Stream> GetData() { using FlowbishStream flowbishStream = new FlowbishStream(OpenRaw(), FlowbishStreamMode.Decipher, ShortName + ".gz", UsesMemoryStream); using SegsStream segsStream = new SegsStream(flowbishStream, SegsStreamMode.Decompress); MemoryStream memoryStream = new MemoryStream(); await segsStream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; return(memoryStream); }
public void DecryptWholeFileTest(string inputFile, string expectedFile) { using (FileStream fileStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read)) { using SegsStream segsStream = new SegsStream(fileStream, SegsStreamMode.Decompress); using FileStream outStream = new FileStream("temp.dat", FileMode.Create, FileAccess.Write); segsStream.CopyTo(outStream); } bool eq = Compare.CompareFiles(expectedFile, "temp.dat"); File.Delete("temp.dat"); Assert.IsTrue(eq); }
public void DecryptReadByteTest(string inputFile, string expectedFile) { using (FileStream fileStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read)) { using SegsStream segsStream = new SegsStream(fileStream, SegsStreamMode.Decompress); using FileStream outStream = new FileStream("temp.dat", FileMode.Create, FileAccess.Write); int b; while ((b = segsStream.ReadByte()) != -1) { outStream.WriteByte((byte)b); } } bool eq = Compare.CompareFiles(expectedFile, "temp.dat"); File.Delete("temp.dat"); Assert.IsTrue(eq); }
/// <summary> /// Writes the contents of a stream into the entry, overwriting any previous data. /// </summary> /// <param name="stream">The stream to copy from</param> /// <exception cref="IOException"/> public override async Task SetData(Stream stream) { _newData?.Dispose(); _newData = new MemoryStream(); using FlowbishStream flowbishStream = new FlowbishStream(_newData, FlowbishStreamMode.Encipher, ShortName + ".gz", true); if (stream.CanSeek) { await SegsStream.CompressStream(stream, flowbishStream); } else { using MemoryStream memStream = new MemoryStream(); await stream.CopyToAsync(memStream); memStream.Position = 0; await SegsStream.CompressStream(memStream, flowbishStream); } }
public async Task CompressUncompressTest(string inputFile) { using (FileStream fileStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read)) { using FileStream outStream = new FileStream("temp.dat", FileMode.Create, FileAccess.Write); await SegsStream.CompressStream(fileStream, outStream); } using (FileStream compStream = new FileStream("temp.dat", FileMode.Open, FileAccess.Read)) { using SegsStream segsStream = new SegsStream(compStream, SegsStreamMode.Decompress); using FileStream outStream = new FileStream("temp2.dat", FileMode.Create, FileAccess.Write); segsStream.CopyTo(outStream); } bool eq = Compare.CompareFiles(inputFile, "temp2.dat"); File.Delete("temp.dat"); File.Delete("temp2.dat"); Assert.IsTrue(eq); }
public void DecryptSeekTest(string inputFile, string expectedFile, int offset) { using (FileStream fileStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read)) { using SegsStream segsStream = new SegsStream(fileStream, SegsStreamMode.Decompress); using FileStream outStream = new FileStream("temp.dat", FileMode.Create, FileAccess.Write); segsStream.Seek(offset, SeekOrigin.Begin); segsStream.CopyTo(outStream); } using (FileStream fileStream1 = new FileStream(expectedFile, FileMode.Open, FileAccess.Read)) { using FileStream outStream = new FileStream("temp_exp.dat", FileMode.Create, FileAccess.Write); fileStream1.Seek(offset, SeekOrigin.Begin); fileStream1.CopyTo(outStream); } bool eq = Compare.CompareFiles("temp_exp.dat", "temp.dat"); File.Delete("temp.dat"); File.Delete("temp_exp.dat"); Assert.IsTrue(eq); }