コード例 #1
0
		void Inflate(MemoryStream ms, byte[] original, int level, bool zlib)
		{
			ms.Seek(0, SeekOrigin.Begin);
			
			Inflater inflater = new Inflater(!zlib);
			InflaterInputStream inStream = new InflaterInputStream(ms, inflater);
			byte[] buf2 = new byte[original.Length];

			int currentIndex  = 0;
			int count = buf2.Length;

			try
			{
				while (true) 
				{
					int numRead = inStream.Read(buf2, currentIndex, count);
					if (numRead <= 0) 
					{
						break;
					}
					currentIndex += numRead;
					count -= numRead;
				}
			}
			catch(Exception ex)
			{
				Console.WriteLine("Unexpected exception - '{0}'", ex.Message);
				throw;
			}

			if ( currentIndex != original.Length )
			{
				Console.WriteLine("Original {0}, new {1}", original.Length, currentIndex);
				Assert.Fail("Lengths different");
			}

			for (int i = 0; i < original.Length; ++i) 
			{
				if ( buf2[i] != original[i] )
				{
					string description = string.Format("Difference at {0} level {1} zlib {2} ", i, level, zlib);
					if ( original.Length < 2048 )
					{
						StringBuilder builder = new StringBuilder(description);
						for (int d = 0; d < original.Length; ++d)
						{
							builder.AppendFormat("{0} ", original[d]);
						}

						Assert.Fail(builder.ToString());
					}
					else
					{
						Assert.Fail(description);
					}
				}
			}
		}
コード例 #2
0
		public void CloseInflatorWithNestedUsing()
		{
			string tempFile = null;
			try	
			{
				tempFile = Path.GetTempPath();
			} 
			catch (SecurityException) 
			{
			}
			
			Assert.IsNotNull(tempFile, "No permission to execute this test?");

			if (tempFile != null) 
			{
				tempFile = Path.Combine(tempFile, "SharpZipTest.Zip");
				using (FileStream diskFile = File.Create(tempFile))
				using (DeflaterOutputStream deflator = new DeflaterOutputStream(diskFile))
				using (StreamWriter textWriter = new StreamWriter(deflator))
				{
					textWriter.Write("Hello");
					textWriter.Flush();
				}

				using (FileStream diskFile = File.OpenRead(tempFile))
				using (InflaterInputStream deflator = new InflaterInputStream(diskFile))
				using (StreamReader textReader = new StreamReader(deflator))
				{
					char[] buffer = new char[5];
					int readCount = textReader.Read(buffer, 0, 5);
					Assert.AreEqual(5, readCount);

					StringBuilder b = new StringBuilder();
					b.Append(buffer);
					Assert.AreEqual("Hello", b.ToString());

				}

				File.Delete(tempFile);
			}
		}
コード例 #3
0
		public void InflatorStreamOwnership()
		{
			MemoryStreamEx memStream = new MemoryStreamEx();
			InflaterInputStream s = new InflaterInputStream(memStream);

			Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially");
			Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially");

			s.Close();

			Assert.IsTrue(memStream.IsClosed, "Should be closed after parent owner close");
			Assert.IsTrue(memStream.IsDisposed, "Should be disposed after parent owner close");

			memStream = new MemoryStreamEx();
			s = new InflaterInputStream(memStream);

			Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially");
			Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially");

			s.IsStreamOwner = false;
			s.Close();

			Assert.IsFalse(memStream.IsClosed, "Should not be closed after parent owner close");
			Assert.IsFalse(memStream.IsDisposed, "Should not be disposed after parent owner close");

		}