Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        /// <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);
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }