Added fork of DotNetZip (Ionic.Zip.dll). It has a bug that needs fixing. This is the source code corresponding to release 1.9.1.8

This commit is contained in:
Diva Canto
2013-02-12 09:04:04 -08:00
parent 4e86fff1fb
commit 7a739ab590
339 changed files with 117753 additions and 0 deletions
Binary file not shown.
+132
View File
@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{18a4aed9-d477-4c57-9c7a-c0cbbd5599de}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Ionic.BZip2</RootNamespace>
<AssemblyName>Ionic.BZip2.CF</AssemblyName>
<PlatformFamilyName>Smartphone</PlatformFamilyName>
<PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>
<OSVersion>5.2</OSVersion>
<DeployDirSuffix>Ionic.BZip2.CF</DeployDirSuffix>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<NativePlatformName>Windows Mobile 6 Standard SDK</NativePlatformName>
<SignAssembly>false</SignAssembly>
<AssemblyOriginatorKeyFile>..\Ionic.snk</AssemblyOriginatorKeyFile>
<FormFactorID>
</FormFactorID>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;Smartphone; NETCF; NETCF20;BZIP</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<FileAlignment>512</FileAlignment>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<DocumentationFile>bin\Debug\Ionic.BZip2.CF.XML</DocumentationFile>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;Smartphone; NETCF; NETCF20;BZIP</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<FileAlignment>512</FileAlignment>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\CommonSrc\CRC32.cs">
<Link>CRC32.cs</Link>
</Compile>
<Compile Include="..\BZip2\*.cs"
Exclude="..\BZip2\ParallelBZip2OutputStream.cs"/>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="..\SolutionInfo.cs">
<Link>SolutionInfo.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="..\Ionic.snk">
<Link>Ionic.snk</Link>
</None>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Condition="'$(TargetFrameworkVersion)' == 'v3.5'" Project="C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.CSharp.targets" />
<Import Condition="'$(TargetFrameworkVersion)' == 'v2.0'" Project="C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.CompactFramework.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">
<HostingProcess disable="1" />
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
</Project>
+134
View File
@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(MSBuildToolsVersion)' == '3.5'">
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{50e11f2c-9d49-45f5-a52d-560be456cc04}</ProjectGuid>
<ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Ionic.BZip2</RootNamespace>
<AssemblyName>Ionic.BZip2</AssemblyName>
<TargetFrameworkVersion>v3.0</TargetFrameworkVersion>
<SilverlightApplication>false</SilverlightApplication>
<ValidateXaml>true</ValidateXaml>
<ThrowErrorsInValidation>true</ThrowErrorsInValidation>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<SignAssembly>false</SignAssembly>
<AssemblyOriginatorKeyFile>..\Ionic.snk</AssemblyOriginatorKeyFile>
<TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
<SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>Bin\Debug\Ionic.BZip2.XML</DocumentationFile>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System.Windows" />
<Reference Include="mscorlib" />
<Reference Include="system" />
<Reference Include="System.Core" />
<Reference Include="System.Xml" />
<Reference Include="System.Net" />
<Reference Include="System.Windows.Browser" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\BZip2\*.cs"/>
<Compile Include="..\CommonSrc\CRC32.cs">
<Link>CRC32.cs</Link>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\SolutionInfo.cs">
<Link>Properties\SolutionInfo.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="..\Ionic.snk">
<Link>Ionic.snk</Link>
</None>
</ItemGroup>
<ItemGroup>
<Content Include="..\BZip2\NOTICE.txt">
<Link>NOTICE.txt</Link>
</Content>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
<SilverlightProjectProperties />
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>
@@ -0,0 +1,21 @@
using System.Reflection;
using System.Security;
using System.Runtime.CompilerServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Ionic's Managed BZip2 for Silverlight")]
#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("library for BZip2 compression. http://DotNetZip.codeplex.com/ (Flavor=Debug)")]
#else
[assembly: AssemblyConfiguration("Retail")]
[assembly: AssemblyDescription("library for BZip2 compression. http://DotNetZip.codeplex.com/ (Flavor=Retail)")]
#endif
[assembly: System.CLSCompliant(true)]
+680
View File
@@ -0,0 +1,680 @@
using System;
using System.Linq;
using System.Text;
using System.Collections.Generic;
using Ionic.BZip2;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
namespace Ionic.BZip2.Tests
{
/// <summary>
/// Summary description for UnitTest1
/// </summary>
[TestClass]
public class UnitTest1
{
private System.Random rnd;
public UnitTest1()
{
this.rnd = new System.Random();
FilesToRemove = new System.Collections.Generic.List<string>();
}
static UnitTest1()
{
string lorem = TestStrings["LoremIpsum"];
LoremIpsumWords = lorem.Split(" ".ToCharArray(),
System.StringSplitOptions.RemoveEmptyEntries);
}
private TestContext testContextInstance;
/// <summary>
///Gets or sets the test context which provides
///information about and functionality for the current test run.
///</summary>
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
#region Additional test attributes
//
// You can use the following additional attributes as you write your tests:
//
// Use ClassInitialize to run code before running the first test in the class
// [ClassInitialize()]
// public static void MyClassInitialize(TestContext testContext) { }
//
// Use ClassCleanup to run code after all tests in a class have run
// [ClassCleanup()]
// public static void MyClassCleanup() { }
//
// Use TestInitialize to run code before running each test
// [TestInitialize()]
// public void MyTestInitialize() { }
//
// Use TestCleanup to run code after each test has run
// [TestCleanup()]
// public void MyTestCleanup() { }
//
private string CurrentDir = null;
private string TopLevelDir = null;
protected System.Collections.Generic.List<string> FilesToRemove;
// Use TestInitialize to run code before running each test
[TestInitialize()]
public void MyTestInitialize()
{
CurrentDir = System.IO.Directory.GetCurrentDirectory();
Assert.AreNotEqual<string>(System.IO.Path.GetFileName(CurrentDir), "Temp", "at start");
string parentDir = System.Environment.GetEnvironmentVariable("TEMP");
TopLevelDir = System.IO.Path.Combine(parentDir, String.Format("Ionic.ZlibTest-{0}.tmp", System.DateTime.Now.ToString("yyyyMMMdd-HHmmss")));
System.IO.Directory.CreateDirectory(TopLevelDir);
System.IO.Directory.SetCurrentDirectory(TopLevelDir);
FilesToRemove.Add(TopLevelDir);
}
// Use TestCleanup to run code after each test has run
[TestCleanup()]
public void MyTestCleanup()
{
Assert.AreNotEqual<string>(Path.GetFileName(CurrentDir), "Temp", "at finish");
Directory.SetCurrentDirectory(CurrentDir);
IOException GotException = null;
int Tries = 0;
do
{
try
{
GotException = null;
foreach (string filename in FilesToRemove)
{
if (Directory.Exists(filename))
{
// turn off any ReadOnly attributes
ClearReadOnly(filename);
Directory.Delete(filename, true);
}
if (File.Exists(filename))
{
File.Delete(filename);
}
}
Tries++;
}
catch (IOException ioexc)
{
GotException = ioexc;
// use an backoff interval before retry
System.Threading.Thread.Sleep(200 * Tries);
}
} while ((GotException != null) && (Tries < 4));
if (GotException != null) throw GotException;
FilesToRemove.Clear();
}
public static void ClearReadOnly(string dirname)
{
// don't traverse reparse points
if ((File.GetAttributes(dirname) & FileAttributes.ReparsePoint) != 0)
return;
foreach (var d in Directory.GetDirectories(dirname))
{
ClearReadOnly(d); // recurse
}
foreach (var f in Directory.GetFiles(dirname))
{
// clear ReadOnly and System attributes
var a = File.GetAttributes(f);
if ((a & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
a ^= FileAttributes.ReadOnly;
File.SetAttributes(f, a);
}
if ((a & FileAttributes.System) == FileAttributes.System)
{
a ^= FileAttributes.System;
File.SetAttributes(f, a);
}
}
}
#endregion
#region Helpers
private static void CopyStream(System.IO.Stream src, System.IO.Stream dest)
{
byte[] buffer = new byte[4096];
int n;
while ((n = src.Read(buffer, 0, buffer.Length)) > 0)
{
dest.Write(buffer, 0, n);
}
}
private static string GetTestDependentDir(string startingPoint, string subdir)
{
var location = startingPoint;
for (int i = 0; i < 3; i++)
location = Path.GetDirectoryName(location);
location = Path.Combine(location, subdir);
return location;
}
private static string GetTestBinDir(string startingPoint)
{
return GetTestDependentDir(startingPoint, "BZip2 Tests\\bin\\Debug");
}
private string GetContentFile(string fileName)
{
string testBin = GetTestBinDir(CurrentDir);
string path = Path.Combine(testBin, String.Format("Resources\\{0}", fileName));
Assert.IsTrue(File.Exists(path), "file ({0}) does not exist", path);
return path;
}
private static Int32 GetCrc(string fname)
{
using (var fs1 = File.OpenRead(fname))
{
var checker = new Ionic.Crc.CRC32(true);
return checker.GetCrc32(fs1);
}
}
internal string Exec(string program, string args)
{
return Exec(program, args, true);
}
internal string Exec(string program, string args, bool waitForExit)
{
return Exec(program, args, waitForExit, true);
}
internal string Exec(string program, string args, bool waitForExit, bool emitOutput)
{
if (program == null)
throw new ArgumentException("program");
if (args == null)
throw new ArgumentException("args");
// Microsoft.VisualStudio.TestTools.UnitTesting
this.TestContext.WriteLine("running command: {0} {1}", program, args);
string output;
int rc = Exec_NoContext(program, args, waitForExit, out output);
if (rc != 0)
throw new Exception(String.Format("Non-zero RC {0}: {1}", program, output));
if (emitOutput)
this.TestContext.WriteLine("output: {0}", output);
else
this.TestContext.WriteLine("A-OK. (output suppressed)");
return output;
}
internal static int Exec_NoContext(string program, string args, bool waitForExit, out string output)
{
System.Diagnostics.Process p = new System.Diagnostics.Process
{
StartInfo =
{
FileName = program,
CreateNoWindow = true,
Arguments = args,
WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
UseShellExecute = false,
}
};
if (waitForExit)
{
StringBuilder sb = new StringBuilder();
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
// must read at least one of the stderr or stdout asynchronously,
// to avoid deadlock
Action<Object, System.Diagnostics.DataReceivedEventArgs> stdErrorRead = (o, e) =>
{
if (!String.IsNullOrEmpty(e.Data))
sb.Append(e.Data);
};
p.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(stdErrorRead);
p.Start();
p.BeginErrorReadLine();
output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
if (sb.Length > 0)
output += sb.ToString();
//output = CleanWzzipOut(output); // just in case
return p.ExitCode;
}
else
{
p.Start();
}
output = "";
return 0;
}
void CreateAndFillTextFile(string filename, Int64 minimumSize)
{
// fill the file with text data, selecting one word at a time
int L = LoremIpsumWords.Length - 2;
Int64 bytesRemaining = minimumSize;
using (StreamWriter sw = File.CreateText(filename))
{
do
{
// pick a word at random
int n = this.rnd.Next(L);
int batchLength = LoremIpsumWords[n].Length +
LoremIpsumWords[n+1].Length +
LoremIpsumWords[n+2].Length + 3;
sw.Write(LoremIpsumWords[n]);
sw.Write(" ");
sw.Write(LoremIpsumWords[n+1]);
sw.Write(" ");
sw.Write(LoremIpsumWords[n+2]);
sw.Write(" ");
bytesRemaining -= batchLength;
} while (bytesRemaining > 0);
}
}
#endregion
[TestMethod]
[Timeout(15 * 60*1000)] // 60*1000 = 1min
public void BZ_LargeParallel()
{
string filename = "LargeFile.txt";
int minSize = 0x6000000 + this.rnd.Next(0x6000000);
TestContext.WriteLine("Creating large file, minimum {0} bytes", minSize);
CreateAndFillTextFile(filename, minSize);
Func<Stream,Stream>[] getBzStream = {
new Func<Stream,Stream>( s0 => {
return new Ionic.BZip2.BZip2OutputStream(s0);
}),
new Func<Stream,Stream>( s1 => {
return new Ionic.BZip2.ParallelBZip2OutputStream(s1);
})
};
var ts = new TimeSpan[2];
for (int k=0; k < 2; k++)
{
var stopwatch = new System.Diagnostics.Stopwatch();
TestContext.WriteLine("Trial {0}", k);
stopwatch.Start();
string bzFname = Path.GetFileNameWithoutExtension(filename) +
"." + k + Path.GetExtension(filename) + ".bz2";
using (Stream input = File.OpenRead(filename),
output = File.Create(bzFname),
compressor = getBzStream[k](output))
{
CopyStream(input, compressor);
}
stopwatch.Stop();
ts[k] = stopwatch.Elapsed;
TestContext.WriteLine("Trial complete {0} : {1}", k, ts[k]);
}
Assert.IsTrue(ts[1]<ts[0],
"Parallel compression took MORE time.");
}
[TestMethod]
[Timeout(15 * 60*1000)] // 60*1000 = 1min
public void BZ_Basic()
{
TestContext.WriteLine("Creating fodder file.");
// select a random text string
var line = TestStrings.ElementAt(this.rnd.Next(0, TestStrings.Count)).Value;
int n = 4000 + this.rnd.Next(1000); // number of iters
var fname = "Pippo.txt";
// emit many many lines into a text file:
using (var sw = new StreamWriter(File.Create(fname)))
{
for (int k=0; k < n; k++)
{
sw.WriteLine(line);
}
}
int crcOriginal = GetCrc(fname);
int blockSize = 0;
Func<Stream,Stream>[] getBzStream = {
new Func<Stream,Stream>( s0 => {
var decorator = new Ionic.BZip2.BZip2OutputStream(s0, blockSize);
return decorator;
}),
new Func<Stream,Stream>( s1 => {
var decorator = new Ionic.BZip2.ParallelBZip2OutputStream(s1, blockSize);
return decorator;
})
};
int[] blockSizes = { 1,2,3,4,5,6,7,8,9 };
for (int k=0; k < getBzStream.Length; k++)
{
for (int m=0; m < blockSizes.Length; m++)
{
blockSize = blockSizes[m];
var getStream = getBzStream[k];
var root = Path.GetFileNameWithoutExtension(fname);
var ext = Path.GetExtension(fname);
// compress into bz2
var bzFname = String.Format("{0}.{1}.blocksize{2}{3}.bz2",
root,
(k==0)?"SingleThread":"MultiThread",
blockSize, ext);
TestContext.WriteLine("Compress cycle ({0},{1})", k,m);
TestContext.WriteLine("file {0}", bzFname);
using (var fs = File.OpenRead(fname))
{
using (var output = File.Create(bzFname))
{
using (var compressor = getStream(output))
{
CopyStream(fs, compressor);
}
}
}
TestContext.WriteLine("Decompress");
var decompressedFname = Path.GetFileNameWithoutExtension(bzFname);
using (Stream fs = File.OpenRead(bzFname),
output = File.Create(decompressedFname),
decompressor = new Ionic.BZip2.BZip2InputStream(fs))
{
CopyStream(decompressor, output);
}
TestContext.WriteLine("Check CRC");
int crcDecompressed = GetCrc(decompressedFname);
Assert.AreEqual<int>(crcOriginal, crcDecompressed,
"CRC mismatch {0:X8} != {1:X8}",
crcOriginal, crcDecompressed);
TestContext.WriteLine("");
// just for the sake of disk space economy:
File.Delete(decompressedFname);
File.Delete(bzFname);
}
}
}
[TestMethod]
[ExpectedException(typeof(IOException))]
public void BZ_Error_1()
{
var bzbin = GetTestDependentDir(CurrentDir, "Tools\\BZip2\\bin\\Debug");
var dnzBzip2exe = Path.Combine(bzbin, "bzip2.exe");
string decompressedFname = "ThisWillNotWork.txt";
using (Stream input = File.OpenRead(dnzBzip2exe),
decompressor = new Ionic.BZip2.BZip2InputStream(input),
output = File.Create(decompressedFname))
CopyStream(decompressor, output);
}
[TestMethod]
[ExpectedException(typeof(IOException))]
public void BZ_Error_2()
{
string decompressedFname = "ThisWillNotWork.txt";
using (Stream input = new MemoryStream(), // empty stream
decompressor = new Ionic.BZip2.BZip2InputStream(input),
output = File.Create(decompressedFname))
CopyStream(decompressor, output);
}
[TestMethod]
public void BZ_Utility()
{
var bzbin = GetTestDependentDir(CurrentDir, "Tools\\BZip2\\bin\\Debug");
var dnzBzip2exe = Path.Combine(bzbin, "bzip2.exe");
Assert.IsTrue(File.Exists(dnzBzip2exe), "Bzip2.exe is missing {0}",
dnzBzip2exe);
var unxBzip2exe = "\\bin\\bzip2.exe";
Assert.IsTrue(File.Exists(unxBzip2exe), "Bzip2.exe is missing {0}",
unxBzip2exe);
foreach (var key in TestStrings.Keys)
{
int count = this.rnd.Next(18) + 4;
TestContext.WriteLine("Doing string {0}", key);
var s = TestStrings[key];
var fname = String.Format("Pippo-{0}.txt", key);
using (var sw = new StreamWriter(File.Create(fname)))
{
for (int k=0; k < count; k++)
{
sw.WriteLine(s);
}
}
int crcOriginal = GetCrc(fname);
string args = fname + " -keep -v";
TestContext.WriteLine("Exec: bzip2 {0}", args);
string bzout = this.Exec(dnzBzip2exe, args);
var bzfile = fname + ".bz2";
Assert.IsTrue(File.Exists(bzfile), "File is missing. {0}",
bzfile);
File.Delete(fname);
Assert.IsTrue(!File.Exists(fname), "The delete failed. {0}",
fname);
System.Threading.Thread.Sleep(1200);
args = "-dfk "+ bzfile;
TestContext.WriteLine("Exec: bzip2 {0}", args);
bzout = this.Exec(unxBzip2exe, args);
Assert.IsTrue(File.Exists(fname), "File is missing. {0}",
fname);
int crcDecompressed = GetCrc(fname);
Assert.AreEqual<int>(crcOriginal, crcDecompressed,
"CRC mismatch {0:X8}!={1:X8}",
crcOriginal, crcDecompressed);
}
}
[TestMethod]
public void BZ_Samples()
{
string testBin = GetTestBinDir(CurrentDir);
string resourceDir = Path.Combine(testBin, "Resources");
var filesToDecompress = Directory.GetFiles(resourceDir, "*.bz2");
Assert.IsTrue(filesToDecompress.Length > 2,
"There are not enough sample files");
foreach (var filename in filesToDecompress)
{
TestContext.WriteLine("Decompressing {0}", filename);
var outFname = filename + ".decompressed";
TestContext.WriteLine("Decompressing to {0}", outFname);
using (var fs = File.OpenRead(filename))
{
using (var output = File.Create(outFname))
{
using (var decompressor = new Ionic.BZip2.BZip2InputStream(fs))
{
CopyStream(decompressor, output);
}
}
}
TestContext.WriteLine("");
}
}
internal static Dictionary<String,String> TestStrings = new Dictionary<String,String>() {
{"LetMeDoItNow", "I expect to pass through the world but once. Any good therefore that I can do, or any kindness I can show to any creature, let me do it now. Let me not defer it, for I shall not pass this way again. -- Anonymous, although some have attributed it to Stephen Grellet" },
{"UntilHeExtends", "Until he extends the circle of his compassion to all living things, man will not himself find peace. - Albert Schweitzer, early 20th-century German Nobel Peace Prize-winning mission doctor and theologian." },
{"WhatWouldThingsHaveBeenLike","'What would things have been like [in Russia] if during periods of mass arrests people had not simply sat there, paling with terror at every bang on the downstairs door and at every step on the staircase, but understood they had nothing to lose and had boldly set up in the downstairs hall an ambush of half a dozen people?' -- Alexander Solzhenitsyn"
},
{"GoPlacidly",
@"Go placidly amid the noise and haste, and remember what peace there may be in silence.
As far as possible, without surrender, be on good terms with all persons. Speak your truth quietly and clearly; and listen to others, even to the dull and the ignorant, they too have their story. Avoid loud and aggressive persons, they are vexations to the spirit.
If you compare yourself with others, you may become vain and bitter; for always there will be greater and lesser persons than yourself. Enjoy your achievements as well as your plans. Keep interested in your own career, however humble; it is a real possession in the changing fortunes of time.
Exercise caution in your business affairs, for the world is full of trickery. But let this not blind you to what virtue there is; many persons strive for high ideals, and everywhere life is full of heroism. Be yourself. Especially, do not feign affection. Neither be cynical about love, for in the face of all aridity and disenchantment it is perennial as the grass.
Take kindly to the counsel of the years, gracefully surrendering the things of youth. Nurture strength of spirit to shield you in sudden misfortune. But do not distress yourself with imaginings. Many fears are born of fatigue and loneliness.
Beyond a wholesome discipline, be gentle with yourself. You are a child of the universe, no less than the trees and the stars; you have a right to be here. And whether or not it is clear to you, no doubt the universe is unfolding as it should.
Therefore be at peace with God, whatever you conceive Him to be, and whatever your labors and aspirations, in the noisy confusion of life, keep peace in your soul.
With all its sham, drudgery and broken dreams, it is still a beautiful world.
Be cheerful. Strive to be happy.
Max Ehrmann c.1920
"},
{"IhaveaDream", @"Let us not wallow in the valley of despair, I say to you today, my friends.
And so even though we face the difficulties of today and tomorrow, I still have a dream. It is a dream deeply rooted in the American dream.
I have a dream that one day this nation will rise up and live out the true meaning of its creed: 'We hold these truths to be self-evident, that all men are created equal.'
I have a dream that one day on the red hills of Georgia, the sons of former slaves and the sons of former slave owners will be able to sit down together at the table of brotherhood.
I have a dream that one day even the state of Mississippi, a state sweltering with the heat of injustice, sweltering with the heat of oppression, will be transformed into an oasis of freedom and justice.
I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character.
I have a dream today!
I have a dream that one day, down in Alabama, with its vicious racists, with its governor having his lips dripping with the words of 'interposition' and 'nullification' -- one day right there in Alabama little black boys and black girls will be able to join hands with little white boys and white girls as sisters and brothers.
I have a dream today!
I have a dream that one day every valley shall be exalted, and every hill and mountain shall be made low, the rough places will be made plain, and the crooked places will be made straight; 'and the glory of the Lord shall be revealed and all flesh shall see it together.'2
"},
{ "LoremIpsum",
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer " +
"vulputate, nibh non rhoncus euismod, erat odio pellentesque lacus, sit " +
"amet convallis mi augue et odio. Phasellus cursus urna facilisis " +
"quam. Suspendisse nec metus et sapien scelerisque euismod. Nullam " +
"molestie sem quis nisl. Fusce pellentesque, ante sed semper egestas, sem " +
"nulla vestibulum nulla, quis sollicitudin leo lorem elementum " +
"wisi. Aliquam vestibulum nonummy orci. Sed in dolor sed enim ullamcorper " +
"accumsan. Duis vel nibh. Class aptent taciti sociosqu ad litora torquent " +
"per conubia nostra, per inceptos hymenaeos. Sed faucibus, enim sit amet " +
"venenatis laoreet, nisl elit posuere est, ut sollicitudin tortor velit " +
"ut ipsum. Aliquam erat volutpat. Phasellus tincidunt vehicula " +
"eros. Curabitur vitae erat. " +
"\n " +
"Quisque pharetra lacus quis sapien. Duis id est non wisi sagittis " +
"adipiscing. Nulla facilisi. Etiam quam erat, lobortis eu, facilisis nec, " +
"blandit hendrerit, metus. Fusce hendrerit. Nunc magna libero, " +
"sollicitudin non, vulputate non, ornare id, nulla. Suspendisse " +
"potenti. Nullam in mauris. Curabitur et nisl vel purus vehicula " +
"sodales. Class aptent taciti sociosqu ad litora torquent per conubia " +
"nostra, per inceptos hymenaeos. Cum sociis natoque penatibus et magnis " +
"dis parturient montes, nascetur ridiculus mus. Donec semper, arcu nec " +
"dignissim porta, eros odio tempus pede, et laoreet nibh arcu et " +
"nisl. Morbi pellentesque eleifend ante. Morbi dictum lorem non " +
"ante. Nullam et augue sit amet sapien varius mollis. " +
"\n " +
"Nulla erat lorem, fringilla eget, ultrices nec, dictum sed, " +
"sapien. Aliquam libero ligula, porttitor scelerisque, lobortis nec, " +
"dignissim eu, elit. Etiam feugiat, dui vitae laoreet faucibus, tellus " +
"urna molestie purus, sit amet pretium lorem pede in erat. Ut non libero " +
"et sapien porttitor eleifend. Vestibulum ante ipsum primis in faucibus " +
"orci luctus et ultrices posuere cubilia Curae; In at lorem et lacus " +
"feugiat iaculis. Nunc tempus eros nec arcu tristique egestas. Quisque " +
"metus arcu, pretium in, suscipit dictum, bibendum sit amet, " +
"mauris. Aliquam non urna. Suspendisse eget diam. Aliquam erat " +
"volutpat. In euismod aliquam lorem. Mauris dolor nisl, consectetuer sit " +
"amet, suscipit sodales, rutrum in, lorem. Nunc nec nisl. Nulla ante " +
"libero, aliquam porttitor, aliquet at, imperdiet sed, diam. Pellentesque " +
"tincidunt nisl et ipsum. Suspendisse purus urna, semper quis, laoreet " +
"in, vestibulum vel, arcu. Nunc elementum eros nec mauris. " +
"\n " +
"Vivamus congue pede at quam. Aliquam aliquam leo vel turpis. Ut " +
"commodo. Integer tincidunt sem a risus. Cras aliquam libero quis " +
"arcu. Integer posuere. Nulla malesuada, wisi ac elementum sollicitudin, " +
"libero libero molestie velit, eu faucibus est ante eu libero. Sed " +
"vestibulum, dolor ac ultricies consectetuer, tellus risus interdum diam, " +
"a imperdiet nibh eros eget mauris. Donec faucibus volutpat " +
"augue. Phasellus vitae arcu quis ipsum ultrices fermentum. Vivamus " +
"ultricies porta ligula. Nullam malesuada. Ut feugiat urna non " +
"turpis. Vivamus ipsum. Vivamus eleifend condimentum risus. Curabitur " +
"pede. Maecenas suscipit pretium tortor. Integer pellentesque. " +
"\n " +
"Mauris est. Aenean accumsan purus vitae ligula. Lorem ipsum dolor sit " +
"amet, consectetuer adipiscing elit. Nullam at mauris id turpis placerat " +
"accumsan. Sed pharetra metus ut ante. Aenean vel urna sit amet ante " +
"pretium dapibus. Sed nulla. Sed nonummy, lacus a suscipit semper, erat " +
"wisi convallis mi, et accumsan magna elit laoreet sem. Nam leo est, " +
"cursus ut, molestie ac, laoreet id, mauris. Suspendisse auctor nibh. " +
"\n"}
};
static string[] LoremIpsumWords;
private const int WORKING_BUFFER_SIZE = 0x4000;
}
}
+121
View File
@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BZip2Test</RootNamespace>
<AssemblyName>BZip2Test</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="BZip2UnitTest1.cs" />
<Compile Include="..\SolutionInfo.cs">
<Link>Properties\SolutionInfo.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="Resources\sample1.bz2">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Resources\sample2.bz2">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Resources\dancing-color.ps.bz2">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BZip2\BZip2 DLL.csproj">
<Project>{e2ce0d56-7af8-4404-bd0c-bc562cbd74d4}</Project>
<Name>BZip2 DLL</Name>
</ProjectReference>
<ProjectReference Include="..\Tools\BZip2\BZip2.csproj">
<Project>{c2241050-f23c-420b-aa67-60e94b34c2b2}</Project>
<Name>BZip2</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+161
View File
@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<SchemaVersion>2.0</SchemaVersion>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon>
</ApplicationIcon>
<AssemblyKeyContainerName>
</AssemblyKeyContainerName>
<AssemblyName>Ionic.BZip2</AssemblyName>
<AssemblyOriginatorKeyFile>..\Ionic.snk</AssemblyOriginatorKeyFile>
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>Library</OutputType>
<RootNamespace>Ionic.BZip2</RootNamespace>
<NoStandardLibraries>false</NoStandardLibraries>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<StartupObject>
</StartupObject>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<ProjectGuid>{e2ce0d56-7af8-4404-bd0c-bc562cbd74d4}</ProjectGuid>
<IsWebBootstrapper>false</IsWebBootstrapper>
<SignAssembly>false</SignAssembly>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>
</DefineConstants>
<DocumentationFile>bin\Debug\Ionic.BZip2.XML</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>
</NoWarn>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>
</DefineConstants>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>
</NoWarn>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib">
<Name>mscorlib</Name>
</Reference>
<Reference Include="System">
<Name>System</Name>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Rand.cs" />
<Compile Include="BZip2InputStream.cs" />
<Compile Include="BZip2Compressor.cs" />
<Compile Include="BZip2OutputStream.cs" />
<Compile Include="ParallelBZip2OutputStream.cs" />
<Compile Include="BitWriter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\CommonSrc\CRC32.cs">
<Link>CRC32.cs</Link>
</Compile>
<Compile Include="..\SolutionInfo.cs">
<Link>SolutionInfo.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="..\Ionic.snk">
<Link>Ionic.snk</Link>
</None>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+530
View File
@@ -0,0 +1,530 @@
//#define Trace
// BZip2OutputStream.cs
// ------------------------------------------------------------------
//
// Copyright (c) 2011 Dino Chiesa.
// All rights reserved.
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// Last Saved: <2011-August-02 16:44:11>
//
// ------------------------------------------------------------------
//
// This module defines the BZip2OutputStream class, which is a
// compressing stream that handles BZIP2. This code may have been
// derived in part from Apache commons source code. The license below
// applies to the original Apache code.
//
// ------------------------------------------------------------------
// flymake: csc.exe /t:module BZip2InputStream.cs BZip2Compressor.cs Rand.cs BCRC32.cs @@FILE@@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// Design Notes:
//
// This class follows the classic Decorator pattern: it is a Stream that
// wraps itself around a Stream, and in doing so provides bzip2
// compression as callers Write into it.
//
// BZip2 is a straightforward data format: there are 4 magic bytes at
// the top of the file, followed by 1 or more compressed blocks. There
// is a small "magic byte" trailer after all compressed blocks. This
// class emits the magic bytes for the header and trailer, and relies on
// a BZip2Compressor to generate each of the compressed data blocks.
//
// BZip2 does byte-shredding - it uses partial fractions of bytes to
// represent independent pieces of information. This class relies on the
// BitWriter to adapt the bit-oriented BZip2 output to the byte-oriented
// model of the .NET Stream class.
//
// ----
//
// Regarding the Apache code base: Most of the code in this particular
// class is related to stream operations, and is my own code. It largely
// does not rely on any code obtained from Apache commons. If you
// compare this code with the Apache commons BZip2OutputStream, you will
// see very little code that is common, except for the
// nearly-boilerplate structure that is common to all subtypes of
// System.IO.Stream. There may be some small remnants of code in this
// module derived from the Apache stuff, which is why I left the license
// in here. Most of the Apache commons compressor magic has been ported
// into the BZip2Compressor class.
//
using System;
using System.IO;
namespace Ionic.BZip2
{
/// <summary>
/// A write-only decorator stream that compresses data as it is
/// written using the BZip2 algorithm.
/// </summary>
public class BZip2OutputStream : System.IO.Stream
{
int totalBytesWrittenIn;
bool leaveOpen;
BZip2Compressor compressor;
uint combinedCRC;
Stream output;
BitWriter bw;
int blockSize100k; // 0...9
private TraceBits desiredTrace = TraceBits.Crc | TraceBits.Write;
/// <summary>
/// Constructs a new <c>BZip2OutputStream</c>, that sends its
/// compressed output to the given output stream.
/// </summary>
///
/// <param name='output'>
/// The destination stream, to which compressed output will be sent.
/// </param>
///
/// <example>
///
/// This example reads a file, then compresses it with bzip2 file,
/// and writes the compressed data into a newly created file.
///
/// <code>
/// var fname = "logfile.log";
/// using (var fs = File.OpenRead(fname))
/// {
/// var outFname = fname + ".bz2";
/// using (var output = File.Create(outFname))
/// {
/// using (var compressor = new Ionic.BZip2.BZip2OutputStream(output))
/// {
/// byte[] buffer = new byte[2048];
/// int n;
/// while ((n = fs.Read(buffer, 0, buffer.Length)) > 0)
/// {
/// compressor.Write(buffer, 0, n);
/// }
/// }
/// }
/// }
/// </code>
/// </example>
public BZip2OutputStream(Stream output)
: this(output, BZip2.MaxBlockSize, false)
{
}
/// <summary>
/// Constructs a new <c>BZip2OutputStream</c> with specified blocksize.
/// </summary>
/// <param name = "output">the destination stream.</param>
/// <param name = "blockSize">
/// The blockSize in units of 100000 bytes.
/// The valid range is 1..9.
/// </param>
public BZip2OutputStream(Stream output, int blockSize)
: this(output, blockSize, false)
{
}
/// <summary>
/// Constructs a new <c>BZip2OutputStream</c>.
/// </summary>
/// <param name = "output">the destination stream.</param>
/// <param name = "leaveOpen">
/// whether to leave the captive stream open upon closing this stream.
/// </param>
public BZip2OutputStream(Stream output, bool leaveOpen)
: this(output, BZip2.MaxBlockSize, leaveOpen)
{
}
/// <summary>
/// Constructs a new <c>BZip2OutputStream</c> with specified blocksize,
/// and explicitly specifies whether to leave the wrapped stream open.
/// </summary>
///
/// <param name = "output">the destination stream.</param>
/// <param name = "blockSize">
/// The blockSize in units of 100000 bytes.
/// The valid range is 1..9.
/// </param>
/// <param name = "leaveOpen">
/// whether to leave the captive stream open upon closing this stream.
/// </param>
public BZip2OutputStream(Stream output, int blockSize, bool leaveOpen)
{
if (blockSize < BZip2.MinBlockSize ||
blockSize > BZip2.MaxBlockSize)
{
var msg = String.Format("blockSize={0} is out of range; must be between {1} and {2}",
blockSize,
BZip2.MinBlockSize, BZip2.MaxBlockSize);
throw new ArgumentException(msg, "blockSize");
}
this.output = output;
if (!this.output.CanWrite)
throw new ArgumentException("The stream is not writable.", "output");
this.bw = new BitWriter(this.output);
this.blockSize100k = blockSize;
this.compressor = new BZip2Compressor(this.bw, blockSize);
this.leaveOpen = leaveOpen;
this.combinedCRC = 0;
EmitHeader();
}
/// <summary>
/// Close the stream.
/// </summary>
/// <remarks>
/// <para>
/// This may or may not close the underlying stream. Check the
/// constructors that accept a bool value.
/// </para>
/// </remarks>
public override void Close()
{
if (output != null)
{
Stream o = this.output;
Finish();
if (!leaveOpen)
o.Close();
}
}
/// <summary>
/// Flush the stream.
/// </summary>
public override void Flush()
{
if (this.output != null)
{
this.bw.Flush();
this.output.Flush();
}
}
private void EmitHeader()
{
var magic = new byte[] {
(byte) 'B',
(byte) 'Z',
(byte) 'h',
(byte) ('0' + this.blockSize100k)
};
// not necessary to shred the initial magic bytes
this.output.Write(magic, 0, magic.Length);
}
private void EmitTrailer()
{
// A magic 48-bit number, 0x177245385090, to indicate the end
// of the last block. (sqrt(pi), if you want to know)
TraceOutput(TraceBits.Write, "total written out: {0} (0x{0:X})",
this.bw.TotalBytesWrittenOut);
// must shred
this.bw.WriteByte(0x17);
this.bw.WriteByte(0x72);
this.bw.WriteByte(0x45);
this.bw.WriteByte(0x38);
this.bw.WriteByte(0x50);
this.bw.WriteByte(0x90);
this.bw.WriteInt(this.combinedCRC);
this.bw.FinishAndPad();
TraceOutput(TraceBits.Write, "final total: {0} (0x{0:X})",
this.bw.TotalBytesWrittenOut);
}
void Finish()
{
// Console.WriteLine("BZip2:Finish");
try
{
var totalBefore = this.bw.TotalBytesWrittenOut;
this.compressor.CompressAndWrite();
TraceOutput(TraceBits.Write,"out block length (bytes): {0} (0x{0:X})",
this.bw.TotalBytesWrittenOut - totalBefore);
TraceOutput(TraceBits.Crc, " combined CRC (before): {0:X8}",
this.combinedCRC);
this.combinedCRC = (this.combinedCRC << 1) | (this.combinedCRC >> 31);
this.combinedCRC ^= (uint) compressor.Crc32;
TraceOutput(TraceBits.Crc, " block CRC : {0:X8}",
this.compressor.Crc32);
TraceOutput(TraceBits.Crc, " combined CRC (final) : {0:X8}",
this.combinedCRC);
EmitTrailer();
}
finally
{
this.output = null;
this.compressor = null;
this.bw = null;
}
}
/// <summary>
/// The blocksize parameter specified at construction time.
/// </summary>
public int BlockSize
{
get { return this.blockSize100k; }
}
/// <summary>
/// Write data to the stream.
/// </summary>
/// <remarks>
///
/// <para>
/// Use the <c>BZip2OutputStream</c> to compress data while writing:
/// create a <c>BZip2OutputStream</c> with a writable output stream.
/// Then call <c>Write()</c> on that <c>BZip2OutputStream</c>, providing
/// uncompressed data as input. The data sent to the output stream will
/// be the compressed form of the input data.
/// </para>
///
/// <para>
/// A <c>BZip2OutputStream</c> can be used only for <c>Write()</c> not for <c>Read()</c>.
/// </para>
///
/// </remarks>
///
/// <param name="buffer">The buffer holding data to write to the stream.</param>
/// <param name="offset">the offset within that data array to find the first byte to write.</param>
/// <param name="count">the number of bytes to write.</param>
public override void Write(byte[] buffer, int offset, int count)
{
if (offset < 0)
throw new IndexOutOfRangeException(String.Format("offset ({0}) must be > 0", offset));
if (count < 0)
throw new IndexOutOfRangeException(String.Format("count ({0}) must be > 0", count));
if (offset + count > buffer.Length)
throw new IndexOutOfRangeException(String.Format("offset({0}) count({1}) bLength({2})",
offset, count, buffer.Length));
if (this.output == null)
throw new IOException("the stream is not open");
if (count == 0) return; // nothing to do
int bytesWritten = 0;
int bytesRemaining = count;
do
{
int n = compressor.Fill(buffer, offset, bytesRemaining);
if (n != bytesRemaining)
{
// The compressor data block is full. Compress and
// write out the compressed data, then reset the
// compressor and continue.
var totalBefore = this.bw.TotalBytesWrittenOut;
this.compressor.CompressAndWrite();
TraceOutput(TraceBits.Write,"out block length (bytes): {0} (0x{0:X})",
this.bw.TotalBytesWrittenOut - totalBefore);
// and now any remaining bits
TraceOutput(TraceBits.Write,
" remaining: {0} 0x{1:X}",
this.bw.NumRemainingBits,
this.bw.RemainingBits);
TraceOutput(TraceBits.Crc, " combined CRC (before): {0:X8}",
this.combinedCRC);
this.combinedCRC = (this.combinedCRC << 1) | (this.combinedCRC >> 31);
this.combinedCRC ^= (uint) compressor.Crc32;
TraceOutput(TraceBits.Crc, " block CRC : {0:X8}",
compressor.Crc32);
TraceOutput(TraceBits.Crc, " combined CRC (after) : {0:X8}",
this.combinedCRC);
offset += n;
}
bytesRemaining -= n;
bytesWritten += n;
} while (bytesRemaining > 0);
totalBytesWrittenIn += bytesWritten;
}
/// <summary>
/// Indicates whether the stream can be read.
/// </summary>
/// <remarks>
/// The return value is always false.
/// </remarks>
public override bool CanRead
{
get { return false; }
}
/// <summary>
/// Indicates whether the stream supports Seek operations.
/// </summary>
/// <remarks>
/// Always returns false.
/// </remarks>
public override bool CanSeek
{
get { return false; }
}
/// <summary>
/// Indicates whether the stream can be written.
/// </summary>
/// <remarks>
/// The return value should always be true, unless and until the
/// object is disposed and closed.
/// </remarks>
public override bool CanWrite
{
get
{
if (this.output == null) throw new ObjectDisposedException("BZip2Stream");
return this.output.CanWrite;
}
}
/// <summary>
/// Reading this property always throws a <see cref="NotImplementedException"/>.
/// </summary>
public override long Length
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// The position of the stream pointer.
/// </summary>
///
/// <remarks>
/// Setting this property always throws a <see
/// cref="NotImplementedException"/>. Reading will return the
/// total number of uncompressed bytes written through.
/// </remarks>
public override long Position
{
get
{
return this.totalBytesWrittenIn;
}
set { throw new NotImplementedException(); }
}
/// <summary>
/// Calling this method always throws a <see cref="NotImplementedException"/>.
/// </summary>
/// <param name="offset">this is irrelevant, since it will always throw!</param>
/// <param name="origin">this is irrelevant, since it will always throw!</param>
/// <returns>irrelevant!</returns>
public override long Seek(long offset, System.IO.SeekOrigin origin)
{
throw new NotImplementedException();
}
/// <summary>
/// Calling this method always throws a <see cref="NotImplementedException"/>.
/// </summary>
/// <param name="value">this is irrelevant, since it will always throw!</param>
public override void SetLength(long value)
{
throw new NotImplementedException();
}
/// <summary>
/// Calling this method always throws a <see cref="NotImplementedException"/>.
/// </summary>
/// <param name='buffer'>this parameter is never used</param>
/// <param name='offset'>this parameter is never used</param>
/// <param name='count'>this parameter is never used</param>
/// <returns>never returns anything; always throws</returns>
public override int Read(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}
// used only when Trace is defined
[Flags]
enum TraceBits : uint
{
None = 0,
Crc = 1,
Write = 2,
All = 0xffffffff,
}
[System.Diagnostics.ConditionalAttribute("Trace")]
private void TraceOutput(TraceBits bits, string format, params object[] varParams)
{
if ((bits & this.desiredTrace) != 0)
{
//lock(outputLock)
{
int tid = System.Threading.Thread.CurrentThread.GetHashCode();
#if !SILVERLIGHT && !NETCF
Console.ForegroundColor = (ConsoleColor) (tid % 8 + 10);
#endif
Console.Write("{0:000} PBOS ", tid);
Console.WriteLine(format, varParams);
#if !SILVERLIGHT && !NETCF
Console.ResetColor();
#endif
}
}
}
}
}
+248
View File
@@ -0,0 +1,248 @@
// BitWriter.cs
// ------------------------------------------------------------------
//
// Copyright (c) 2011 Dino Chiesa.
// All rights reserved.
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// Last Saved: <2011-July-25 18:57:31>
//
// ------------------------------------------------------------------
//
// This module defines the BitWriter class, which writes bits at a time
// to an output stream. It's used by the BZip2Compressor class, and by
// the BZip2OutputStream class and its parallel variant,
// ParallelBZip2OutputStream.
//
// ------------------------------------------------------------------
//
// Design notes:
//
// BZip2 employs byte-shredding in its data format - rather than
// aligning all data items in a compressed .bz2 file on byte barriers,
// the BZip2 format uses portions of bytes to represent independent
// pieces of information. This "shredding" starts with the first
// "randomised" bit - just 12 bytes or so into a bz2 file or stream. But
// the approach is used extensively in bzip2 files - sometimes 5 bits
// are used, sometimes 24 or 3 bits, sometimes just 1 bit, and so on.
// It's not possible to send this information directly to a stream in
// this form; Streams in .NET accept byte-oriented input. Therefore,
// when actually writing a bz2 file, the output data must be organized
// into a byte-aligned format before being written to the output stream.
//
// This BitWriter class provides the byte-shredding necessary for BZip2
// output. Think of this class as an Adapter that enables Bit-oriented
// output to a standard byte-oriented .NET stream. This class writes
// data out to the captive output stream only after the data bits have
// been accumulated and aligned. For example, suppose that during
// operation, the BZip2 compressor emits 5 bits, then 24 bits, then 32
// bits. When the first 5 bits are sent to the BitWriter, nothing is
// written to the output stream; instead these 5 bits are simply stored
// in the internal accumulator. When the next 24 bits are written, the
// first 3 bits are gathered with the accumulated bits. The resulting
// 5+3 constitutes an entire byte; the BitWriter then actually writes
// that byte to the output stream. This leaves 21 bits. BitWriter writes
// 2 more whole bytes (16 more bits), in 8-bit chunks, leaving 5 in the
// accumulator. BitWriter then follows the same procedure with the 32
// new bits. And so on.
//
// A quick tour of the implementation:
//
// The accumulator is a uint - so it can accumulate at most 4 bytes of
// information. In practice because of the design of this class, it
// never accumulates more than 3 bytes.
//
// The Flush() method emits all whole bytes available. After calling
// Flush(), there may be between 0-7 bits yet to be emitted into the
// output stream.
//
// FinishAndPad() emits all data, including the last partial byte and
// any necessary padding. In effect, it establishes a byte-alignment
// barrier. To support bzip2, FinishAndPad() should be called only once
// for a bz2 file, after the last bit of data has been written through
// this adapter. Other binary file formats may use byte-alignment at
// various points within the file, and FinishAndPad() would support that
// scenario.
//
// The internal fn Reset() is used to reset the state of the adapter;
// this class is used by BZip2Compressor, instances of which get re-used
// by multiple distinct threads, for different blocks of data.
//
using System;
using System.IO;
namespace Ionic.BZip2
{
internal class BitWriter
{
uint accumulator;
int nAccumulatedBits;
Stream output;
int totalBytesWrittenOut;
public BitWriter(Stream s)
{
this.output = s;
}
/// <summary>
/// Delivers the remaining bits, left-aligned, in a byte.
/// </summary>
/// <remarks>
/// <para>
/// This is valid only if NumRemainingBits is less than 8;
/// in other words it is valid only after a call to Flush().
/// </para>
/// </remarks>
public byte RemainingBits
{
get
{
return (byte) (this.accumulator >> (32 - this.nAccumulatedBits) & 0xff);
}
}
public int NumRemainingBits
{
get
{
return this.nAccumulatedBits;
}
}
public int TotalBytesWrittenOut
{
get
{
return this.totalBytesWrittenOut;
}
}
/// <summary>
/// Reset the BitWriter.
/// </summary>
/// <remarks>
/// <para>
/// This is useful when the BitWriter writes into a MemoryStream, and
/// is used by a BZip2Compressor, which itself is re-used for multiple
/// distinct data blocks.
/// </para>
/// </remarks>
public void Reset()
{
this.accumulator = 0;
this.nAccumulatedBits = 0;
this.totalBytesWrittenOut = 0;
this.output.Seek(0, SeekOrigin.Begin);
this.output.SetLength(0);
}
/// <summary>
/// Write some number of bits from the given value, into the output.
/// </summary>
/// <remarks>
/// <para>
/// The nbits value should be a max of 25, for safety. For performance
/// reasons, this method does not check!
/// </para>
/// </remarks>
public void WriteBits(int nbits, uint value)
{
int nAccumulated = this.nAccumulatedBits;
uint u = this.accumulator;
while (nAccumulated >= 8)
{
this.output.WriteByte ((byte)(u >> 24 & 0xff));
this.totalBytesWrittenOut++;
u <<= 8;
nAccumulated -= 8;
}
this.accumulator = u | (value << (32 - nAccumulated - nbits));
this.nAccumulatedBits = nAccumulated + nbits;
// Console.WriteLine("WriteBits({0}, 0x{1:X2}) => {2:X8} n({3})",
// nbits, value, accumulator, nAccumulatedBits);
// Console.ReadLine();
// At this point the accumulator may contain up to 31 bits waiting for
// output.
}
/// <summary>
/// Write a full 8-bit byte into the output.
/// </summary>
public void WriteByte(byte b)
{
WriteBits(8, b);
}
/// <summary>
/// Write four 8-bit bytes into the output.
/// </summary>
public void WriteInt(uint u)
{
WriteBits(8, (u >> 24) & 0xff);
WriteBits(8, (u >> 16) & 0xff);
WriteBits(8, (u >> 8) & 0xff);
WriteBits(8, u & 0xff);
}
/// <summary>
/// Write all available byte-aligned bytes.
/// </summary>
/// <remarks>
/// <para>
/// This method writes no new output, but flushes any accumulated
/// bits. At completion, the accumulator may contain up to 7
/// bits.
/// </para>
/// <para>
/// This is necessary when re-assembling output from N independent
/// compressors, one for each of N blocks. The output of any
/// particular compressor will in general have some fragment of a byte
/// remaining. This fragment needs to be accumulated into the
/// parent BZip2OutputStream.
/// </para>
/// </remarks>
public void Flush()
{
WriteBits(0,0);
}
/// <summary>
/// Writes all available bytes, and emits padding for the final byte as
/// necessary. This must be the last method invoked on an instance of
/// BitWriter.
/// </summary>
public void FinishAndPad()
{
Flush();
if (this.NumRemainingBits > 0)
{
byte b = (byte)((this.accumulator >> 24) & 0xff);
this.output.WriteByte(b);
this.totalBytesWrittenOut++;
}
}
}
}
+5
View File
@@ -0,0 +1,5 @@
Apache Commons Compress
Copyright 2002-2010 The Apache Software Foundation
This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).
@@ -0,0 +1,999 @@
//#define Trace
// ParallelBZip2OutputStream.cs
// ------------------------------------------------------------------
//
// Copyright (c) 2011 Dino Chiesa.
// All rights reserved.
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// Last Saved: <2011-August-02 16:44:24>
//
// ------------------------------------------------------------------
//
// This module defines the ParallelBZip2OutputStream class, which is a
// BZip2 compressing stream. This code was derived in part from Apache
// commons source code. The license below applies to the original Apache
// code.
//
// ------------------------------------------------------------------
// flymake: csc.exe /t:module BZip2InputStream.cs BZip2Compressor.cs Rand.cs BCRC32.cs @@FILE@@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// Design Notes:
//
// This class follows the classic Decorator pattern: it is a Stream that
// wraps itself around a Stream, and in doing so provides bzip2
// compression as callers Write into it. It is exactly the same in
// outward function as the BZip2OutputStream, except that this class can
// perform compression using multiple independent threads. Because of
// that, and because of the CPU-intensive nature of BZip2 compression,
// this class can perform significantly better (in terms of wall-click
// time) than the single-threaded variant, at the expense of memory and
// CPU utilization.
//
// BZip2 is a straightforward data format: there are 4 magic bytes at
// the top of the file, followed by 1 or more compressed blocks. There
// is a small "magic byte" trailer after all compressed blocks.
//
// In concept parallelizing BZip2 is simple: do the CPU-intensive
// compression for each block in a separate thread, then emit the
// compressed output, in order, to the output stream. Each block can be
// compressed independently, so a block is the natural candidate for the
// parcel of work that can be passed to an independent worker thread.
//
// The design approach used here is simple: within the Write() method of
// the stream, fill a block. When the block is full, pass it to a
// background worker thread for compression. When the compressor thread
// completes its work, the main thread (the application thread that
// calls Write()) can send the compressed data to the output stream,
// being careful to respect the order of the compressed blocks.
//
// The challenge of ordering the compressed data is a solved and
// well-understood problem - it is the same approach here as DotNetZip
// uses in the ParallelDeflateOutputStream. It is a map/reduce approach
// in design intent.
//
// One new twist for BZip2 is that the compressor output is not
// byte-aligned. In other words the final output of a compressed block
// will in general be a number of bits that is not a multiple of
// 8. Therefore, combining the ordered results of the N compressor
// threads requires additional byte-shredding by the parent
// stream. Hence this stream uses a BitWriter to adapt bit-oriented
// BZip2 output to the byte-oriented .NET Stream.
//
// The approach used here creates N instances of the BZip2Compressor
// type, where N is governed by the number of cores (cpus) and limited
// by the MaxWorkers property exposed by this class. Each
// BZip2Compressor instance gets its own MemoryStream, to which it
// writes its data, via a BitWriter.
//
// along with the bit accumulator described above. The MemoryStream
// would gather the byte-aligned compressed output of the compressor.
// When reducing the output of the various workers, this class must
// again do the byte-shredding thing. The data from the compressors is
// therefore shredded twice: once when being placed into the
// MemoryStream, and again when emitted into the final output stream
// that this class decorates. This is an unfortunate and seemingly
// unavoidable inefficiency. Two rounds of byte-shredding will use more
// CPU than we'd like, but I haven't imagined a way to avoid it.
//
// The BZip2Compressor is designed to write directly into the parent
// stream's accumulator (BitWriter) when possible, and write into a
// distinct BitWriter when necessary. The former can be used in a
// single-thread scenario, while the latter is required in a
// multi-thread scenario.
//
// ----
//
// Regarding the Apache code base: Most of the code in this particular
// class is related to stream operations and thread synchronization, and
// is my own code. It largely does not rely on any code obtained from
// Apache commons. If you compare this code with the Apache commons
// BZip2OutputStream, you will see very little code that is common,
// except for the nearly-boilerplate structure that is common to all
// subtypes of System.IO.Stream. There may be some small remnants of
// code in this module derived from the Apache stuff, which is why I
// left the license in here. Most of the Apache commons compressor magic
// has been ported into the BZip2Compressor class.
//
using System;
using System.IO;
using System.Collections.Generic;
using System.Threading;
namespace Ionic.BZip2
{
internal class WorkItem
{
public int index;
public BZip2Compressor Compressor { get; private set; }
public MemoryStream ms;
public int ordinal;
public BitWriter bw;
public WorkItem(int ix, int blockSize)
{
// compressed data gets written to a MemoryStream
this.ms = new MemoryStream();
this.bw = new BitWriter(ms);
this.Compressor = new BZip2Compressor(bw, blockSize);
this.index = ix;
}
}
/// <summary>
/// A write-only decorator stream that compresses data as it is
/// written using the BZip2 algorithm. This stream compresses by
/// block using multiple threads.
/// </summary>
/// <para>
/// This class performs BZIP2 compression through writing. For
/// more information on the BZIP2 algorithm, see
/// <see href="http://en.wikipedia.org/wiki/BZIP2"/>.
/// </para>
///
/// <para>
/// This class is similar to <see cref="Ionic.BZip2.BZip2OutputStream"/>,
/// except that this implementation uses an approach that employs multiple
/// worker threads to perform the compression. On a multi-cpu or multi-core
/// computer, the performance of this class can be significantly higher than
/// the single-threaded BZip2OutputStream, particularly for larger streams.
/// How large? Anything over 10mb is a good candidate for parallel
/// compression.
/// </para>
///
/// <para>
/// The tradeoff is that this class uses more memory and more CPU than the
/// vanilla <c>BZip2OutputStream</c>. Also, for small files, the
/// <c>ParallelBZip2OutputStream</c> can be much slower than the vanilla
/// <c>BZip2OutputStream</c>, because of the overhead associated to using the
/// thread pool.
/// </para>
///
/// <seealso cref="Ionic.BZip2.BZip2OutputStream" />
public class ParallelBZip2OutputStream : System.IO.Stream
{
private static readonly int BufferPairsPerCore = 4;
private int _maxWorkers;
private bool firstWriteDone;
private int lastFilled;
private int lastWritten;
private int latestCompressed;
private int currentlyFilling;
private volatile Exception pendingException;
private bool handlingException;
private bool emitting;
private System.Collections.Generic.Queue<int> toWrite;
private System.Collections.Generic.Queue<int> toFill;
private System.Collections.Generic.List<WorkItem> pool;
private object latestLock = new object();
private object eLock = new object(); // for exceptions
private object outputLock = new object(); // for multi-thread output
private AutoResetEvent newlyCompressedBlob;
long totalBytesWrittenIn;
long totalBytesWrittenOut;
bool leaveOpen;
uint combinedCRC;
Stream output;
BitWriter bw;
int blockSize100k; // 0...9
private TraceBits desiredTrace = TraceBits.Crc | TraceBits.Write;
/// <summary>
/// Constructs a new <c>ParallelBZip2OutputStream</c>, that sends its
/// compressed output to the given output stream.
/// </summary>
///
/// <param name='output'>
/// The destination stream, to which compressed output will be sent.
/// </param>
///
/// <example>
///
/// This example reads a file, then compresses it with bzip2 file,
/// and writes the compressed data into a newly created file.
///
/// <code>
/// var fname = "logfile.log";
/// using (var fs = File.OpenRead(fname))
/// {
/// var outFname = fname + ".bz2";
/// using (var output = File.Create(outFname))
/// {
/// using (var compressor = new Ionic.BZip2.ParallelBZip2OutputStream(output))
/// {
/// byte[] buffer = new byte[2048];
/// int n;
/// while ((n = fs.Read(buffer, 0, buffer.Length)) > 0)
/// {
/// compressor.Write(buffer, 0, n);
/// }
/// }
/// }
/// }
/// </code>
/// </example>
public ParallelBZip2OutputStream(Stream output)
: this(output, BZip2.MaxBlockSize, false)
{
}
/// <summary>
/// Constructs a new <c>ParallelBZip2OutputStream</c> with specified blocksize.
/// </summary>
/// <param name = "output">the destination stream.</param>
/// <param name = "blockSize">
/// The blockSize in units of 100000 bytes.
/// The valid range is 1..9.
/// </param>
public ParallelBZip2OutputStream(Stream output, int blockSize)
: this(output, blockSize, false)
{
}
/// <summary>
/// Constructs a new <c>ParallelBZip2OutputStream</c>.
/// </summary>
/// <param name = "output">the destination stream.</param>
/// <param name = "leaveOpen">
/// whether to leave the captive stream open upon closing this stream.
/// </param>
public ParallelBZip2OutputStream(Stream output, bool leaveOpen)
: this(output, BZip2.MaxBlockSize, leaveOpen)
{
}
/// <summary>
/// Constructs a new <c>ParallelBZip2OutputStream</c> with specified blocksize,
/// and explicitly specifies whether to leave the wrapped stream open.
/// </summary>
///
/// <param name = "output">the destination stream.</param>
/// <param name = "blockSize">
/// The blockSize in units of 100000 bytes.
/// The valid range is 1..9.
/// </param>
/// <param name = "leaveOpen">
/// whether to leave the captive stream open upon closing this stream.
/// </param>
public ParallelBZip2OutputStream(Stream output, int blockSize, bool leaveOpen)
{
if (blockSize < BZip2.MinBlockSize || blockSize > BZip2.MaxBlockSize)
{
var msg = String.Format("blockSize={0} is out of range; must be between {1} and {2}",
blockSize,
BZip2.MinBlockSize, BZip2.MaxBlockSize);
throw new ArgumentException(msg, "blockSize");
}
this.output = output;
if (!this.output.CanWrite)
throw new ArgumentException("The stream is not writable.", "output");
this.bw = new BitWriter(this.output);
this.blockSize100k = blockSize;
this.leaveOpen = leaveOpen;
this.combinedCRC = 0;
this.MaxWorkers = 16; // default
EmitHeader();
}
private void InitializePoolOfWorkItems()
{
this.toWrite = new Queue<int>();
this.toFill = new Queue<int>();
this.pool = new System.Collections.Generic.List<WorkItem>();
int nWorkers = BufferPairsPerCore * Environment.ProcessorCount;
nWorkers = Math.Min(nWorkers, this.MaxWorkers);
for(int i=0; i < nWorkers; i++)
{
this.pool.Add(new WorkItem(i, this.blockSize100k));
this.toFill.Enqueue(i);
}
this.newlyCompressedBlob = new AutoResetEvent(false);
this.currentlyFilling = -1;
this.lastFilled = -1;
this.lastWritten = -1;
this.latestCompressed = -1;
}
/// <summary>
/// The maximum number of concurrent compression worker threads to use.
/// </summary>
///
/// <remarks>
/// <para>
/// This property sets an upper limit on the number of concurrent worker
/// threads to employ for compression. The implementation of this stream
/// employs multiple threads from the .NET thread pool, via <see
/// cref="System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback)">
/// ThreadPool.QueueUserWorkItem()</see>, to compress the incoming data by
/// block. As each block of data is compressed, this stream re-orders the
/// compressed blocks and writes them to the output stream.
/// </para>
///
/// <para>
/// A higher number of workers enables a higher degree of
/// parallelism, which tends to increase the speed of compression on
/// multi-cpu computers. On the other hand, a higher number of buffer
/// pairs also implies a larger memory consumption, more active worker
/// threads, and a higher cpu utilization for any compression. This
/// property enables the application to limit its memory consumption and
/// CPU utilization behavior depending on requirements.
/// </para>
///
/// <para>
/// By default, DotNetZip allocates 4 workers per CPU core, subject to the
/// upper limit specified in this property. For example, suppose the
/// application sets this property to 16. Then, on a machine with 2
/// cores, DotNetZip will use 8 workers; that number does not exceed the
/// upper limit specified by this property, so the actual number of
/// workers used will be 4 * 2 = 8. On a machine with 4 cores, DotNetZip
/// will use 16 workers; again, the limit does not apply. On a machine
/// with 8 cores, DotNetZip will use 16 workers, because of the limit.
/// </para>
///
/// <para>
/// For each compression "worker thread" that occurs in parallel, there is
/// up to 2mb of memory allocated, for buffering and processing. The
/// actual number depends on the <see cref="BlockSize"/> property.
/// </para>
///
/// <para>
/// CPU utilization will also go up with additional workers, because a
/// larger number of buffer pairs allows a larger number of background
/// threads to compress in parallel. If you find that parallel
/// compression is consuming too much memory or CPU, you can adjust this
/// value downward.
/// </para>
///
/// <para>
/// The default value is 16. Different values may deliver better or
/// worse results, depending on your priorities and the dynamic
/// performance characteristics of your storage and compute resources.
/// </para>
///
/// <para>
/// The application can set this value at any time, but it is effective
/// only before the first call to Write(), which is when the buffers are
/// allocated.
/// </para>
/// </remarks>
public int MaxWorkers
{
get
{
return _maxWorkers;
}
set
{
if (value < 4)
throw new ArgumentException("MaxWorkers",
"Value must be 4 or greater.");
_maxWorkers = value;
}
}
/// <summary>
/// Close the stream.
/// </summary>
/// <remarks>
/// <para>
/// This may or may not close the underlying stream. Check the
/// constructors that accept a bool value.
/// </para>
/// </remarks>
public override void Close()
{
if (this.pendingException != null)
{
this.handlingException = true;
var pe = this.pendingException;
this.pendingException = null;
throw pe;
}
if (this.handlingException)
return;
if (output == null)
return;
Stream o = this.output;
try
{
FlushOutput(true);
}
finally
{
this.output = null;
this.bw = null;
}
if (!leaveOpen)
o.Close();
}
private void FlushOutput(bool lastInput)
{
if (this.emitting) return;
// compress and write whatever is ready
if (this.currentlyFilling >= 0)
{
WorkItem workitem = this.pool[this.currentlyFilling];
CompressOne(workitem);
this.currentlyFilling = -1; // get a new buffer next Write()
}
if (lastInput)
{
EmitPendingBuffers(true, false);
EmitTrailer();
}
else
{
EmitPendingBuffers(false, false);
}
}
/// <summary>
/// Flush the stream.
/// </summary>
public override void Flush()
{
if (this.output != null)
{
FlushOutput(false);
this.bw.Flush();
this.output.Flush();
}
}
private void EmitHeader()
{
var magic = new byte[] {
(byte) 'B',
(byte) 'Z',
(byte) 'h',
(byte) ('0' + this.blockSize100k)
};
// not necessary to shred the initial magic bytes
this.output.Write(magic, 0, magic.Length);
}
private void EmitTrailer()
{
// A magic 48-bit number, 0x177245385090, to indicate the end
// of the last block. (sqrt(pi), if you want to know)
TraceOutput(TraceBits.Write, "total written out: {0} (0x{0:X})",
this.bw.TotalBytesWrittenOut);
// must shred
this.bw.WriteByte(0x17);
this.bw.WriteByte(0x72);
this.bw.WriteByte(0x45);
this.bw.WriteByte(0x38);
this.bw.WriteByte(0x50);
this.bw.WriteByte(0x90);
this.bw.WriteInt(this.combinedCRC);
this.bw.FinishAndPad();
TraceOutput(TraceBits.Write, "final total : {0} (0x{0:X})",
this.bw.TotalBytesWrittenOut);
}
/// <summary>
/// The blocksize parameter specified at construction time.
/// </summary>
public int BlockSize
{
get { return this.blockSize100k; }
}
/// <summary>
/// Write data to the stream.
/// </summary>
/// <remarks>
///
/// <para>
/// Use the <c>ParallelBZip2OutputStream</c> to compress data while
/// writing: create a <c>ParallelBZip2OutputStream</c> with a writable
/// output stream. Then call <c>Write()</c> on that
/// <c>ParallelBZip2OutputStream</c>, providing uncompressed data as
/// input. The data sent to the output stream will be the compressed
/// form of the input data.
/// </para>
///
/// <para>
/// A <c>ParallelBZip2OutputStream</c> can be used only for
/// <c>Write()</c> not for <c>Read()</c>.
/// </para>
///
/// </remarks>
///
/// <param name="buffer">The buffer holding data to write to the stream.</param>
/// <param name="offset">the offset within that data array to find the first byte to write.</param>
/// <param name="count">the number of bytes to write.</param>
public override void Write(byte[] buffer, int offset, int count)
{
bool mustWait = false;
// This method does this:
// 0. handles any pending exceptions
// 1. write any buffers that are ready to be written
// 2. fills a compressor buffer; when full, flip state to 'Filled',
// 3. if more data to be written, goto step 1
if (this.output == null)
throw new IOException("the stream is not open");
// dispense any exceptions that occurred on the BG threads
if (this.pendingException != null)
{
this.handlingException = true;
var pe = this.pendingException;
this.pendingException = null;
throw pe;
}
if (offset < 0)
throw new IndexOutOfRangeException(String.Format("offset ({0}) must be > 0", offset));
if (count < 0)
throw new IndexOutOfRangeException(String.Format("count ({0}) must be > 0", count));
if (offset + count > buffer.Length)
throw new IndexOutOfRangeException(String.Format("offset({0}) count({1}) bLength({2})",
offset, count, buffer.Length));
if (count == 0) return; // nothing to do
if (!this.firstWriteDone)
{
// Want to do this on first Write, first session, and not in the
// constructor. Must allow the MaxWorkers to change after
// construction, but before first Write().
InitializePoolOfWorkItems();
this.firstWriteDone = true;
}
int bytesWritten = 0;
int bytesRemaining = count;
do
{
// may need to make buffers available
EmitPendingBuffers(false, mustWait);
mustWait = false;
// get a compressor to fill
int ix = -1;
if (this.currentlyFilling >= 0)
{
ix = this.currentlyFilling;
}
else
{
if (this.toFill.Count == 0)
{
// No compressors available to fill, so... need to emit
// compressed buffers.
mustWait = true;
continue;
}
ix = this.toFill.Dequeue();
++this.lastFilled;
}
WorkItem workitem = this.pool[ix];
workitem.ordinal = this.lastFilled;
int n = workitem.Compressor.Fill(buffer, offset, bytesRemaining);
if (n != bytesRemaining)
{
if (!ThreadPool.QueueUserWorkItem( CompressOne, workitem ))
throw new Exception("Cannot enqueue workitem");
this.currentlyFilling = -1; // will get a new buffer next time
offset += n;
}
else
this.currentlyFilling = ix;
bytesRemaining -= n;
bytesWritten += n;
}
while (bytesRemaining > 0);
totalBytesWrittenIn += bytesWritten;
return;
}
private void EmitPendingBuffers(bool doAll, bool mustWait)
{
// When combining parallel compression with a ZipSegmentedStream, it's
// possible for the ZSS to throw from within this method. In that
// case, Close/Dispose will be called on this stream, if this stream
// is employed within a using or try/finally pair as required. But
// this stream is unaware of the pending exception, so the Close()
// method invokes this method AGAIN. This can lead to a deadlock.
// Therefore, failfast if re-entering.
if (emitting) return;
emitting = true;
if (doAll || mustWait)
this.newlyCompressedBlob.WaitOne();
do
{
int firstSkip = -1;
int millisecondsToWait = doAll ? 200 : (mustWait ? -1 : 0);
int nextToWrite = -1;
do
{
if (Monitor.TryEnter(this.toWrite, millisecondsToWait))
{
nextToWrite = -1;
try
{
if (this.toWrite.Count > 0)
nextToWrite = this.toWrite.Dequeue();
}
finally
{
Monitor.Exit(this.toWrite);
}
if (nextToWrite >= 0)
{
WorkItem workitem = this.pool[nextToWrite];
if (workitem.ordinal != this.lastWritten + 1)
{
// out of order. requeue and try again.
lock(this.toWrite)
{
this.toWrite.Enqueue(nextToWrite);
}
if (firstSkip == nextToWrite)
{
// We went around the list once.
// None of the items in the list is the one we want.
// Now wait for a compressor to signal again.
this.newlyCompressedBlob.WaitOne();
firstSkip = -1;
}
else if (firstSkip == -1)
firstSkip = nextToWrite;
continue;
}
firstSkip = -1;
TraceOutput(TraceBits.Write,
"Writing block {0}", workitem.ordinal);
// write the data to the output
var bw2 = workitem.bw;
bw2.Flush(); // not bw2.FinishAndPad()!
var ms = workitem.ms;
ms.Seek(0,SeekOrigin.Begin);
// cannot dump bytes!!
// ms.WriteTo(this.output);
//
// must do byte shredding:
int n;
int y = -1;
long totOut = 0;
var buffer = new byte[1024];
while ((n = ms.Read(buffer,0,buffer.Length)) > 0)
{
#if Trace
if (y == -1) // diagnostics only
{
var sb1 = new System.Text.StringBuilder();
sb1.Append("first 16 whole bytes in block: ");
for (int z=0; z < 16; z++)
sb1.Append(String.Format(" {0:X2}", buffer[z]));
TraceOutput(TraceBits.Write, sb1.ToString());
}
#endif
y = n;
for (int k=0; k < n; k++)
{
this.bw.WriteByte(buffer[k]);
}
totOut += n;
}
#if Trace
TraceOutput(TraceBits.Write,"out block length (bytes): {0} (0x{0:X})", totOut);
var sb = new System.Text.StringBuilder();
sb.Append("final 16 whole bytes in block: ");
for (int z=0; z < 16; z++)
sb.Append(String.Format(" {0:X2}", buffer[y-1-12+z]));
TraceOutput(TraceBits.Write, sb.ToString());
#endif
// and now any remaining bits
TraceOutput(TraceBits.Write,
" remaining bits: {0} 0x{1:X}",
bw2.NumRemainingBits,
bw2.RemainingBits);
if (bw2.NumRemainingBits > 0)
{
this.bw.WriteBits(bw2.NumRemainingBits, bw2.RemainingBits);
}
TraceOutput(TraceBits.Crc," combined CRC (before): {0:X8}",
this.combinedCRC);
this.combinedCRC = (this.combinedCRC << 1) | (this.combinedCRC >> 31);
this.combinedCRC ^= (uint) workitem.Compressor.Crc32;
TraceOutput(TraceBits.Crc,
" block CRC : {0:X8}",
workitem.Compressor.Crc32);
TraceOutput(TraceBits.Crc,
" combined CRC (after) : {0:X8}",
this.combinedCRC);
TraceOutput(TraceBits.Write,
"total written out: {0} (0x{0:X})",
this.bw.TotalBytesWrittenOut);
TraceOutput(TraceBits.Write | TraceBits.Crc, "");
this.totalBytesWrittenOut += totOut;
bw2.Reset();
this.lastWritten = workitem.ordinal;
workitem.ordinal = -1;
this.toFill.Enqueue(workitem.index);
// don't wait next time through
if (millisecondsToWait == -1) millisecondsToWait = 0;
}
}
else
nextToWrite = -1;
} while (nextToWrite >= 0);
} while (doAll && (this.lastWritten != this.latestCompressed));
if (doAll)
{
TraceOutput(TraceBits.Crc,
" combined CRC (final) : {0:X8}", this.combinedCRC);
}
emitting = false;
}
private void CompressOne(Object wi)
{
// compress and one buffer
WorkItem workitem = (WorkItem) wi;
try
{
// compress and write to the compressor's MemoryStream
workitem.Compressor.CompressAndWrite();
lock(this.latestLock)
{
if (workitem.ordinal > this.latestCompressed)
this.latestCompressed = workitem.ordinal;
}
lock (this.toWrite)
{
this.toWrite.Enqueue(workitem.index);
}
this.newlyCompressedBlob.Set();
}
catch (System.Exception exc1)
{
lock(this.eLock)
{
// expose the exception to the main thread
if (this.pendingException!=null)
this.pendingException = exc1;
}
}
}
/// <summary>
/// Indicates whether the stream can be read.
/// </summary>
/// <remarks>
/// The return value is always false.
/// </remarks>
public override bool CanRead
{
get { return false; }
}
/// <summary>
/// Indicates whether the stream supports Seek operations.
/// </summary>
/// <remarks>
/// Always returns false.
/// </remarks>
public override bool CanSeek
{
get { return false; }
}
/// <summary>
/// Indicates whether the stream can be written.
/// </summary>
/// <remarks>
/// The return value depends on whether the captive stream supports writing.
/// </remarks>
public override bool CanWrite
{
get
{
if (this.output == null) throw new ObjectDisposedException("BZip2Stream");
return this.output.CanWrite;
}
}
/// <summary>
/// Reading this property always throws a <see cref="NotImplementedException"/>.
/// </summary>
public override long Length
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// The position of the stream pointer.
/// </summary>
///
/// <remarks>
/// Setting this property always throws a <see
/// cref="NotImplementedException"/>. Reading will return the
/// total number of uncompressed bytes written through.
/// </remarks>
public override long Position
{
get
{
return this.totalBytesWrittenIn;
}
set { throw new NotImplementedException(); }
}
/// <summary>
/// The total number of bytes written out by the stream.
/// </summary>
/// <remarks>
/// This value is meaningful only after a call to Close().
/// </remarks>
public Int64 BytesWrittenOut { get { return totalBytesWrittenOut; } }
/// <summary>
/// Calling this method always throws a <see cref="NotImplementedException"/>.
/// </summary>
/// <param name="offset">this is irrelevant, since it will always throw!</param>
/// <param name="origin">this is irrelevant, since it will always throw!</param>
/// <returns>irrelevant!</returns>
public override long Seek(long offset, System.IO.SeekOrigin origin)
{
throw new NotImplementedException();
}
/// <summary>
/// Calling this method always throws a <see cref="NotImplementedException"/>.
/// </summary>
/// <param name="value">this is irrelevant, since it will always throw!</param>
public override void SetLength(long value)
{
throw new NotImplementedException();
}
/// <summary>
/// Calling this method always throws a <see cref="NotImplementedException"/>.
/// </summary>
/// <param name='buffer'>this parameter is never used</param>
/// <param name='offset'>this parameter is never used</param>
/// <param name='count'>this parameter is never used</param>
/// <returns>never returns anything; always throws</returns>
public override int Read(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}
// used only when Trace is defined
[Flags]
enum TraceBits : uint
{
None = 0,
Crc = 1,
Write = 2,
All = 0xffffffff,
}
[System.Diagnostics.ConditionalAttribute("Trace")]
private void TraceOutput(TraceBits bits, string format, params object[] varParams)
{
if ((bits & this.desiredTrace) != 0)
{
lock(outputLock)
{
int tid = Thread.CurrentThread.GetHashCode();
#if !SILVERLIGHT
Console.ForegroundColor = (ConsoleColor) (tid % 8 + 10);
#endif
Console.Write("{0:000} PBOS ", tid);
Console.WriteLine(format, varParams);
#if !SILVERLIGHT
Console.ResetColor();
#endif
}
}
}
}
}
Binary file not shown.
+99
View File
@@ -0,0 +1,99 @@
// Rand.cs
// ------------------------------------------------------------------
//
// Copyright (c) 2011 Dino Chiesa.
// All rights reserved.
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// Last Saved: <2011-July-31 15:09:16>
//
// ------------------------------------------------------------------
//
// This module defines a helper class for the BZip2 classes. This code
// is derived from the original BZip2 source code.
//
// ------------------------------------------------------------------
namespace Ionic.BZip2
{
internal static class Rand
{
private static int[] RNUMS =
{
619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
936, 638
};
/// <summary>
/// Returns the "random" number at a specific index.
/// </summary>
/// <param name='i'>the index</param>
/// <returns>the random number</returns>
internal static int Rnums(int i)
{
return RNUMS[i];
}
}
}
+7
View File
@@ -0,0 +1,7 @@
msbuild.exe /p:Configuration=Release Help\HtmlHelp1.shfbproj
msbuild.exe /p:Configuration=Release Help\HelpViewer.shfbproj
if exist c:\dev\dotnet\pronounceword.exe (c:\dev\dotnet\pronounceword.exe Build Complete >nul:)
+814
View File
@@ -0,0 +1,814 @@
// CRC32.cs
// ------------------------------------------------------------------
//
// Copyright (c) 2011 Dino Chiesa.
// All rights reserved.
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// Last Saved: <2011-August-02 18:25:54>
//
// ------------------------------------------------------------------
//
// This module defines the CRC32 class, which can do the CRC32 algorithm, using
// arbitrary starting polynomials, and bit reversal. The bit reversal is what
// distinguishes this CRC-32 used in BZip2 from the CRC-32 that is used in PKZIP
// files, or GZIP files. This class does both.
//
// ------------------------------------------------------------------
using System;
using Interop = System.Runtime.InteropServices;
namespace Ionic.Crc
{
/// <summary>
/// Computes a CRC-32. The CRC-32 algorithm is parameterized - you
/// can set the polynomial and enable or disable bit
/// reversal. This can be used for GZIP, BZip2, or ZIP.
/// </summary>
/// <remarks>
/// This type is used internally by DotNetZip; it is generally not used
/// directly by applications wishing to create, read, or manipulate zip
/// archive files.
/// </remarks>
[Interop.GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000C")]
[Interop.ComVisible(true)]
#if !NETCF
[Interop.ClassInterface(Interop.ClassInterfaceType.AutoDispatch)]
#endif
public class CRC32
{
/// <summary>
/// Indicates the total number of bytes applied to the CRC.
/// </summary>
public Int64 TotalBytesRead
{
get
{
return _TotalBytesRead;
}
}
/// <summary>
/// Indicates the current CRC for all blocks slurped in.
/// </summary>
public Int32 Crc32Result
{
get
{
return unchecked((Int32)(~_register));
}
}
/// <summary>
/// Returns the CRC32 for the specified stream.
/// </summary>
/// <param name="input">The stream over which to calculate the CRC32</param>
/// <returns>the CRC32 calculation</returns>
public Int32 GetCrc32(System.IO.Stream input)
{
return GetCrc32AndCopy(input, null);
}
/// <summary>
/// Returns the CRC32 for the specified stream, and writes the input into the
/// output stream.
/// </summary>
/// <param name="input">The stream over which to calculate the CRC32</param>
/// <param name="output">The stream into which to deflate the input</param>
/// <returns>the CRC32 calculation</returns>
public Int32 GetCrc32AndCopy(System.IO.Stream input, System.IO.Stream output)
{
if (input == null)
throw new Exception("The input stream must not be null.");
unchecked
{
byte[] buffer = new byte[BUFFER_SIZE];
int readSize = BUFFER_SIZE;
_TotalBytesRead = 0;
int count = input.Read(buffer, 0, readSize);
if (output != null) output.Write(buffer, 0, count);
_TotalBytesRead += count;
while (count > 0)
{
SlurpBlock(buffer, 0, count);
count = input.Read(buffer, 0, readSize);
if (output != null) output.Write(buffer, 0, count);
_TotalBytesRead += count;
}
return (Int32)(~_register);
}
}
/// <summary>
/// Get the CRC32 for the given (word,byte) combo. This is a
/// computation defined by PKzip for PKZIP 2.0 (weak) encryption.
/// </summary>
/// <param name="W">The word to start with.</param>
/// <param name="B">The byte to combine it with.</param>
/// <returns>The CRC-ized result.</returns>
public Int32 ComputeCrc32(Int32 W, byte B)
{
return _InternalComputeCrc32((UInt32)W, B);
}
internal Int32 _InternalComputeCrc32(UInt32 W, byte B)
{
return (Int32)(crc32Table[(W ^ B) & 0xFF] ^ (W >> 8));
}
/// <summary>
/// Update the value for the running CRC32 using the given block of bytes.
/// This is useful when using the CRC32() class in a Stream.
/// </summary>
/// <param name="block">block of bytes to slurp</param>
/// <param name="offset">starting point in the block</param>
/// <param name="count">how many bytes within the block to slurp</param>
public void SlurpBlock(byte[] block, int offset, int count)
{
if (block == null)
throw new Exception("The data buffer must not be null.");
// bzip algorithm
for (int i = 0; i < count; i++)
{
int x = offset + i;
byte b = block[x];
if (this.reverseBits)
{
UInt32 temp = (_register >> 24) ^ b;
_register = (_register << 8) ^ crc32Table[temp];
}
else
{
UInt32 temp = (_register & 0x000000FF) ^ b;
_register = (_register >> 8) ^ crc32Table[temp];
}
}
_TotalBytesRead += count;
}
/// <summary>
/// Process one byte in the CRC.
/// </summary>
/// <param name = "b">the byte to include into the CRC . </param>
public void UpdateCRC(byte b)
{
if (this.reverseBits)
{
UInt32 temp = (_register >> 24) ^ b;
_register = (_register << 8) ^ crc32Table[temp];
}
else
{
UInt32 temp = (_register & 0x000000FF) ^ b;
_register = (_register >> 8) ^ crc32Table[temp];
}
}
/// <summary>
/// Process a run of N identical bytes into the CRC.
/// </summary>
/// <remarks>
/// <para>
/// This method serves as an optimization for updating the CRC when a
/// run of identical bytes is found. Rather than passing in a buffer of
/// length n, containing all identical bytes b, this method accepts the
/// byte value and the length of the (virtual) buffer - the length of
/// the run.
/// </para>
/// </remarks>
/// <param name = "b">the byte to include into the CRC. </param>
/// <param name = "n">the number of times that byte should be repeated. </param>
public void UpdateCRC(byte b, int n)
{
while (n-- > 0)
{
if (this.reverseBits)
{
uint temp = (_register >> 24) ^ b;
_register = (_register << 8) ^ crc32Table[(temp >= 0)
? temp
: (temp + 256)];
}
else
{
UInt32 temp = (_register & 0x000000FF) ^ b;
_register = (_register >> 8) ^ crc32Table[(temp >= 0)
? temp
: (temp + 256)];
}
}
}
private static uint ReverseBits(uint data)
{
unchecked
{
uint ret = data;
ret = (ret & 0x55555555) << 1 | (ret >> 1) & 0x55555555;
ret = (ret & 0x33333333) << 2 | (ret >> 2) & 0x33333333;
ret = (ret & 0x0F0F0F0F) << 4 | (ret >> 4) & 0x0F0F0F0F;
ret = (ret << 24) | ((ret & 0xFF00) << 8) | ((ret >> 8) & 0xFF00) | (ret >> 24);
return ret;
}
}
private static byte ReverseBits(byte data)
{
unchecked
{
uint u = (uint)data * 0x00020202;
uint m = 0x01044010;
uint s = u & m;
uint t = (u << 2) & (m << 1);
return (byte)((0x01001001 * (s + t)) >> 24);
}
}
private void GenerateLookupTable()
{
crc32Table = new UInt32[256];
unchecked
{
UInt32 dwCrc;
byte i = 0;
do
{
dwCrc = i;
for (byte j = 8; j > 0; j--)
{
if ((dwCrc & 1) == 1)
{
dwCrc = (dwCrc >> 1) ^ dwPolynomial;
}
else
{
dwCrc >>= 1;
}
}
if (reverseBits)
{
crc32Table[ReverseBits(i)] = ReverseBits(dwCrc);
}
else
{
crc32Table[i] = dwCrc;
}
i++;
} while (i!=0);
}
#if VERBOSE
Console.WriteLine();
Console.WriteLine("private static readonly UInt32[] crc32Table = {");
for (int i = 0; i < crc32Table.Length; i+=4)
{
Console.Write(" ");
for (int j=0; j < 4; j++)
{
Console.Write(" 0x{0:X8}U,", crc32Table[i+j]);
}
Console.WriteLine();
}
Console.WriteLine("};");
Console.WriteLine();
#endif
}
private uint gf2_matrix_times(uint[] matrix, uint vec)
{
uint sum = 0;
int i=0;
while (vec != 0)
{
if ((vec & 0x01)== 0x01)
sum ^= matrix[i];
vec >>= 1;
i++;
}
return sum;
}
private void gf2_matrix_square(uint[] square, uint[] mat)
{
for (int i = 0; i < 32; i++)
square[i] = gf2_matrix_times(mat, mat[i]);
}
/// <summary>
/// Combines the given CRC32 value with the current running total.
/// </summary>
/// <remarks>
/// This is useful when using a divide-and-conquer approach to
/// calculating a CRC. Multiple threads can each calculate a
/// CRC32 on a segment of the data, and then combine the
/// individual CRC32 values at the end.
/// </remarks>
/// <param name="crc">the crc value to be combined with this one</param>
/// <param name="length">the length of data the CRC value was calculated on</param>
public void Combine(int crc, int length)
{
uint[] even = new uint[32]; // even-power-of-two zeros operator
uint[] odd = new uint[32]; // odd-power-of-two zeros operator
if (length == 0)
return;
uint crc1= ~_register;
uint crc2= (uint) crc;
// put operator for one zero bit in odd
odd[0] = this.dwPolynomial; // the CRC-32 polynomial
uint row = 1;
for (int i = 1; i < 32; i++)
{
odd[i] = row;
row <<= 1;
}
// put operator for two zero bits in even
gf2_matrix_square(even, odd);
// put operator for four zero bits in odd
gf2_matrix_square(odd, even);
uint len2 = (uint) length;
// apply len2 zeros to crc1 (first square will put the operator for one
// zero byte, eight zero bits, in even)
do {
// apply zeros operator for this bit of len2
gf2_matrix_square(even, odd);
if ((len2 & 1)== 1)
crc1 = gf2_matrix_times(even, crc1);
len2 >>= 1;
if (len2 == 0)
break;
// another iteration of the loop with odd and even swapped
gf2_matrix_square(odd, even);
if ((len2 & 1)==1)
crc1 = gf2_matrix_times(odd, crc1);
len2 >>= 1;
} while (len2 != 0);
crc1 ^= crc2;
_register= ~crc1;
//return (int) crc1;
return;
}
/// <summary>
/// Create an instance of the CRC32 class using the default settings: no
/// bit reversal, and a polynomial of 0xEDB88320.
/// </summary>
public CRC32() : this(false)
{
}
/// <summary>
/// Create an instance of the CRC32 class, specifying whether to reverse
/// data bits or not.
/// </summary>
/// <param name='reverseBits'>
/// specify true if the instance should reverse data bits.
/// </param>
/// <remarks>
/// <para>
/// In the CRC-32 used by BZip2, the bits are reversed. Therefore if you
/// want a CRC32 with compatibility with BZip2, you should pass true
/// here. In the CRC-32 used by GZIP and PKZIP, the bits are not
/// reversed; Therefore if you want a CRC32 with compatibility with
/// those, you should pass false.
/// </para>
/// </remarks>
public CRC32(bool reverseBits) :
this( unchecked((int)0xEDB88320), reverseBits)
{
}
/// <summary>
/// Create an instance of the CRC32 class, specifying the polynomial and
/// whether to reverse data bits or not.
/// </summary>
/// <param name='polynomial'>
/// The polynomial to use for the CRC, expressed in the reversed (LSB)
/// format: the highest ordered bit in the polynomial value is the
/// coefficient of the 0th power; the second-highest order bit is the
/// coefficient of the 1 power, and so on. Expressed this way, the
/// polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320.
/// </param>
/// <param name='reverseBits'>
/// specify true if the instance should reverse data bits.
/// </param>
///
/// <remarks>
/// <para>
/// In the CRC-32 used by BZip2, the bits are reversed. Therefore if you
/// want a CRC32 with compatibility with BZip2, you should pass true
/// here for the <c>reverseBits</c> parameter. In the CRC-32 used by
/// GZIP and PKZIP, the bits are not reversed; Therefore if you want a
/// CRC32 with compatibility with those, you should pass false for the
/// <c>reverseBits</c> parameter.
/// </para>
/// </remarks>
public CRC32(int polynomial, bool reverseBits)
{
this.reverseBits = reverseBits;
this.dwPolynomial = (uint) polynomial;
this.GenerateLookupTable();
}
/// <summary>
/// Reset the CRC-32 class - clear the CRC "remainder register."
/// </summary>
/// <remarks>
/// <para>
/// Use this when employing a single instance of this class to compute
/// multiple, distinct CRCs on multiple, distinct data blocks.
/// </para>
/// </remarks>
public void Reset()
{
_register = 0xFFFFFFFFU;
}
// private member vars
private UInt32 dwPolynomial;
private Int64 _TotalBytesRead;
private bool reverseBits;
private UInt32[] crc32Table;
private const int BUFFER_SIZE = 8192;
private UInt32 _register = 0xFFFFFFFFU;
}
/// <summary>
/// A Stream that calculates a CRC32 (a checksum) on all bytes read,
/// or on all bytes written.
/// </summary>
///
/// <remarks>
/// <para>
/// This class can be used to verify the CRC of a ZipEntry when
/// reading from a stream, or to calculate a CRC when writing to a
/// stream. The stream should be used to either read, or write, but
/// not both. If you intermix reads and writes, the results are not
/// defined.
/// </para>
///
/// <para>
/// This class is intended primarily for use internally by the
/// DotNetZip library.
/// </para>
/// </remarks>
public class CrcCalculatorStream : System.IO.Stream, System.IDisposable
{
private static readonly Int64 UnsetLengthLimit = -99;
internal System.IO.Stream _innerStream;
private CRC32 _Crc32;
private Int64 _lengthLimit = -99;
private bool _leaveOpen;
/// <summary>
/// The default constructor.
/// </summary>
/// <remarks>
/// <para>
/// Instances returned from this constructor will leave the underlying
/// stream open upon Close(). The stream uses the default CRC32
/// algorithm, which implies a polynomial of 0xEDB88320.
/// </para>
/// </remarks>
/// <param name="stream">The underlying stream</param>
public CrcCalculatorStream(System.IO.Stream stream)
: this(true, CrcCalculatorStream.UnsetLengthLimit, stream, null)
{
}
/// <summary>
/// The constructor allows the caller to specify how to handle the
/// underlying stream at close.
/// </summary>
/// <remarks>
/// <para>
/// The stream uses the default CRC32 algorithm, which implies a
/// polynomial of 0xEDB88320.
/// </para>
/// </remarks>
/// <param name="stream">The underlying stream</param>
/// <param name="leaveOpen">true to leave the underlying stream
/// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>
public CrcCalculatorStream(System.IO.Stream stream, bool leaveOpen)
: this(leaveOpen, CrcCalculatorStream.UnsetLengthLimit, stream, null)
{
}
/// <summary>
/// A constructor allowing the specification of the length of the stream
/// to read.
/// </summary>
/// <remarks>
/// <para>
/// The stream uses the default CRC32 algorithm, which implies a
/// polynomial of 0xEDB88320.
/// </para>
/// <para>
/// Instances returned from this constructor will leave the underlying
/// stream open upon Close().
/// </para>
/// </remarks>
/// <param name="stream">The underlying stream</param>
/// <param name="length">The length of the stream to slurp</param>
public CrcCalculatorStream(System.IO.Stream stream, Int64 length)
: this(true, length, stream, null)
{
if (length < 0)
throw new ArgumentException("length");
}
/// <summary>
/// A constructor allowing the specification of the length of the stream
/// to read, as well as whether to keep the underlying stream open upon
/// Close().
/// </summary>
/// <remarks>
/// <para>
/// The stream uses the default CRC32 algorithm, which implies a
/// polynomial of 0xEDB88320.
/// </para>
/// </remarks>
/// <param name="stream">The underlying stream</param>
/// <param name="length">The length of the stream to slurp</param>
/// <param name="leaveOpen">true to leave the underlying stream
/// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>
public CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen)
: this(leaveOpen, length, stream, null)
{
if (length < 0)
throw new ArgumentException("length");
}
/// <summary>
/// A constructor allowing the specification of the length of the stream
/// to read, as well as whether to keep the underlying stream open upon
/// Close(), and the CRC32 instance to use.
/// </summary>
/// <remarks>
/// <para>
/// The stream uses the specified CRC32 instance, which allows the
/// application to specify how the CRC gets calculated.
/// </para>
/// </remarks>
/// <param name="stream">The underlying stream</param>
/// <param name="length">The length of the stream to slurp</param>
/// <param name="leaveOpen">true to leave the underlying stream
/// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>
/// <param name="crc32">the CRC32 instance to use to calculate the CRC32</param>
public CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen,
CRC32 crc32)
: this(leaveOpen, length, stream, crc32)
{
if (length < 0)
throw new ArgumentException("length");
}
// This ctor is private - no validation is done here. This is to allow the use
// of a (specific) negative value for the _lengthLimit, to indicate that there
// is no length set. So we validate the length limit in those ctors that use an
// explicit param, otherwise we don't validate, because it could be our special
// value.
private CrcCalculatorStream
(bool leaveOpen, Int64 length, System.IO.Stream stream, CRC32 crc32)
: base()
{
_innerStream = stream;
_Crc32 = crc32 ?? new CRC32();
_lengthLimit = length;
_leaveOpen = leaveOpen;
}
/// <summary>
/// Gets the total number of bytes run through the CRC32 calculator.
/// </summary>
///
/// <remarks>
/// This is either the total number of bytes read, or the total number of
/// bytes written, depending on the direction of this stream.
/// </remarks>
public Int64 TotalBytesSlurped
{
get { return _Crc32.TotalBytesRead; }
}
/// <summary>
/// Provides the current CRC for all blocks slurped in.
/// </summary>
/// <remarks>
/// <para>
/// The running total of the CRC is kept as data is written or read
/// through the stream. read this property after all reads or writes to
/// get an accurate CRC for the entire stream.
/// </para>
/// </remarks>
public Int32 Crc
{
get { return _Crc32.Crc32Result; }
}
/// <summary>
/// Indicates whether the underlying stream will be left open when the
/// <c>CrcCalculatorStream</c> is Closed.
/// </summary>
/// <remarks>
/// <para>
/// Set this at any point before calling <see cref="Close()"/>.
/// </para>
/// </remarks>
public bool LeaveOpen
{
get { return _leaveOpen; }
set { _leaveOpen = value; }
}
/// <summary>
/// Read from the stream
/// </summary>
/// <param name="buffer">the buffer to read</param>
/// <param name="offset">the offset at which to start</param>
/// <param name="count">the number of bytes to read</param>
/// <returns>the number of bytes actually read</returns>
public override int Read(byte[] buffer, int offset, int count)
{
int bytesToRead = count;
// Need to limit the # of bytes returned, if the stream is intended to have
// a definite length. This is especially useful when returning a stream for
// the uncompressed data directly to the application. The app won't
// necessarily read only the UncompressedSize number of bytes. For example
// wrapping the stream returned from OpenReader() into a StreadReader() and
// calling ReadToEnd() on it, We can "over-read" the zip data and get a
// corrupt string. The length limits that, prevents that problem.
if (_lengthLimit != CrcCalculatorStream.UnsetLengthLimit)
{
if (_Crc32.TotalBytesRead >= _lengthLimit) return 0; // EOF
Int64 bytesRemaining = _lengthLimit - _Crc32.TotalBytesRead;
if (bytesRemaining < count) bytesToRead = (int)bytesRemaining;
}
int n = _innerStream.Read(buffer, offset, bytesToRead);
if (n > 0) _Crc32.SlurpBlock(buffer, offset, n);
return n;
}
/// <summary>
/// Write to the stream.
/// </summary>
/// <param name="buffer">the buffer from which to write</param>
/// <param name="offset">the offset at which to start writing</param>
/// <param name="count">the number of bytes to write</param>
public override void Write(byte[] buffer, int offset, int count)
{
if (count > 0) _Crc32.SlurpBlock(buffer, offset, count);
_innerStream.Write(buffer, offset, count);
}
/// <summary>
/// Indicates whether the stream supports reading.
/// </summary>
public override bool CanRead
{
get { return _innerStream.CanRead; }
}
/// <summary>
/// Indicates whether the stream supports seeking.
/// </summary>
/// <remarks>
/// <para>
/// Always returns false.
/// </para>
/// </remarks>
public override bool CanSeek
{
get { return false; }
}
/// <summary>
/// Indicates whether the stream supports writing.
/// </summary>
public override bool CanWrite
{
get { return _innerStream.CanWrite; }
}
/// <summary>
/// Flush the stream.
/// </summary>
public override void Flush()
{
_innerStream.Flush();
}
/// <summary>
/// Returns the length of the underlying stream.
/// </summary>
public override long Length
{
get
{
if (_lengthLimit == CrcCalculatorStream.UnsetLengthLimit)
return _innerStream.Length;
else return _lengthLimit;
}
}
/// <summary>
/// The getter for this property returns the total bytes read.
/// If you use the setter, it will throw
/// <see cref="NotSupportedException"/>.
/// </summary>
public override long Position
{
get { return _Crc32.TotalBytesRead; }
set { throw new NotSupportedException(); }
}
/// <summary>
/// Seeking is not supported on this stream. This method always throws
/// <see cref="NotSupportedException"/>
/// </summary>
/// <param name="offset">N/A</param>
/// <param name="origin">N/A</param>
/// <returns>N/A</returns>
public override long Seek(long offset, System.IO.SeekOrigin origin)
{
throw new NotSupportedException();
}
/// <summary>
/// This method always throws
/// <see cref="NotSupportedException"/>
/// </summary>
/// <param name="value">N/A</param>
public override void SetLength(long value)
{
throw new NotSupportedException();
}
void IDisposable.Dispose()
{
Close();
}
/// <summary>
/// Closes the stream.
/// </summary>
public override void Close()
{
base.Close();
if (!_leaveOpen)
_innerStream.Close();
}
}
}
+413
View File
@@ -0,0 +1,413 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E1C14695-E75F-4317-919A-5341EA1F9C01}"
ProjectSection(SolutionItems) = preProject
DotNetZip.vsmdi = DotNetZip.vsmdi
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zip DLL", "Zip\Zip DLL.csproj", "{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zip Tests", "Zip Tests\Zip Tests.csproj", "{549466CE-5CA6-4904-BA44-58141544BE70}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zip CF DLL", "Zip CF\Zip CF DLL.csproj", "{051C2B3B-8CDF-42CB-9EA2-027232BFC395}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zip SL", "Zip SL\Zip SL.csproj", "{1F27CA58-54BD-485A-BC24-3B9176F62AC3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zlib DLL", "Zlib\Zlib DLL.csproj", "{9816BA86-9250-4C00-A912-25F07F8677D1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zlib Tests", "Zlib Tests\Zlib Tests.csproj", "{047A98B2-BC96-41B4-ADD8-2167FB1B6502}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zlib CF DLL", "Zlib CF\Zlib CF DLL.csproj", "{E082D395-52BE-41EE-812B-8B09C51025B4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zlib SL DLL", "Zlib SL DLL\Zlib SL DLL.csproj", "{8E580B45-AECD-46BF-9D63-CD8BECE24D29}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BZip2 DLL", "BZip2\BZip2 DLL.csproj", "{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BZip2 Tests", "BZip2 Tests\BZip2 Tests.csproj", "{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BZip2 CF DLL", "BZip2 CF\BZip2 CF DLL.csproj", "{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BZip2 SL DLL", "BZip2 SL DLL\BZip2 SL DLL.csproj", "{50E11F2C-9D49-45F5-A52D-560BE456CC04}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zip Reduced", "Zip Reduced\Zip Reduced.csproj", "{49A128D3-C3F2-46B1-8F7A-EECD209EA860}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CF-Unzipper", "Examples\CompactFramework\CF-Unzipper\CF-Unzipper.csproj", "{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "QuickUnzip", "Examples\VB\Quick-Unzip\QuickUnzip.vbproj", "{95D9690B-3B37-4800-A511-6FB21436638B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZipDir", "Examples\C#\ZipDir\ZipDir.csproj", "{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CreateZip", "Examples\C#\CreateZip\CreateZip.csproj", "{FB9FC8D7-7897-4802-9694-F379F25C00CB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReadZip", "Examples\C#\ReadZip\ReadZip.csproj", "{F4024C01-1133-4A5A-B421-22EA8CA89EA5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BZip2", "Tools\BZip2\BZip2.csproj", "{C2241050-F23C-420B-AA67-60E94B34C2B2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GZip", "Tools\GZip\GZip.csproj", "{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnZip", "Tools\UnZip\UnZip.csproj", "{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZipIt", "Tools\ZipIt\ZipIt.csproj", "{98008721-C4DD-4F34-B3AE-A3453E29BB65}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertZipToSfx", "Tools\ConvertZipToSfx\ConvertZipToSfx.csproj", "{276B8174-A24E-4257-9969-42D692F8CAC2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Win Forms App", "Tools\WinFormsApp\Win Forms App.csproj", "{6BCCF138-2EFB-464C-B872-E3079F0A4708}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZipTreeView", "Examples\C#\ZipTreeView\ZipTreeView.csproj", "{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WinForms-TreeViewZip", "Examples\VB\WinForms-TreeViewZip\WinForms-TreeViewZip\WinForms-TreeViewZip.vbproj", "{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WinForms-Unzip", "Examples\VB\WinForms-DotNetZip\WinForms-Unzip\WinForms-Unzip.vbproj", "{9E4C484D-656E-4E19-8741-5701D027AA51}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "DotNetZipUtils", "Setup Utils\DotNetZipUtils.wixproj", "{18B1CDB1-709D-46D4-A894-9FE0BF929686}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "DotNetZip Runtime", "Setup Runtime\DotNetZip Runtime.wixproj", "{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{1BB61851-D01A-4788-8033-C1821FC3738B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compact Framework", "Compact Framework", "{7CFA8083-4960-4BFE-8DF0-16034C828CDE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{E29C6340-FD50-4857-8C45-7BA227646B00}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Setups", "Setups", "{70D5B6AD-813F-4CBC-AB08-60045171C377}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Silverlight", "Silverlight", "{E4B9972A-F80D-4D85-BF52-109D37856AC2}"
EndProject
Global
GlobalSection(TestCaseManagementSettings) = postSolution
CategoryFile = DotNetZip.vsmdi
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Debug|x86.ActiveCfg = Debug|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Release|Any CPU.Build.0 = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}.Release|x86.ActiveCfg = Release|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Debug|Any CPU.Build.0 = Debug|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Debug|x86.ActiveCfg = Debug|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Release|Any CPU.ActiveCfg = Release|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Release|Any CPU.Build.0 = Release|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{549466CE-5CA6-4904-BA44-58141544BE70}.Release|x86.ActiveCfg = Release|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Debug|Any CPU.Build.0 = Debug|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Debug|x86.ActiveCfg = Debug|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Release|Any CPU.ActiveCfg = Release|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Release|Any CPU.Build.0 = Release|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{051C2B3B-8CDF-42CB-9EA2-027232BFC395}.Release|x86.ActiveCfg = Release|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Debug|x86.ActiveCfg = Debug|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Release|Any CPU.Build.0 = Release|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{1F27CA58-54BD-485A-BC24-3B9176F62AC3}.Release|x86.ActiveCfg = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Debug|x86.ActiveCfg = Debug|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Release|Any CPU.Build.0 = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{9816BA86-9250-4C00-A912-25F07F8677D1}.Release|x86.ActiveCfg = Release|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Debug|Any CPU.Build.0 = Debug|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Debug|x86.ActiveCfg = Debug|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Release|Any CPU.ActiveCfg = Release|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Release|Any CPU.Build.0 = Release|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{047A98B2-BC96-41B4-ADD8-2167FB1B6502}.Release|x86.ActiveCfg = Release|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Debug|x86.ActiveCfg = Debug|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Release|Any CPU.Build.0 = Release|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{E082D395-52BE-41EE-812B-8B09C51025B4}.Release|x86.ActiveCfg = Release|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Debug|x86.ActiveCfg = Debug|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Release|Any CPU.Build.0 = Release|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{8E580B45-AECD-46BF-9D63-CD8BECE24D29}.Release|x86.ActiveCfg = Release|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Debug|x86.ActiveCfg = Debug|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Release|Any CPU.Build.0 = Release|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{E2CE0D56-7AF8-4404-BD0C-BC562CBD74D4}.Release|x86.ActiveCfg = Release|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Debug|x86.ActiveCfg = Debug|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Release|Any CPU.Build.0 = Release|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF}.Release|x86.ActiveCfg = Release|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Debug|x86.ActiveCfg = Debug|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Release|Any CPU.Build.0 = Release|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE}.Release|x86.ActiveCfg = Release|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Debug|x86.ActiveCfg = Debug|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Release|Any CPU.Build.0 = Release|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{50E11F2C-9D49-45F5-A52D-560BE456CC04}.Release|x86.ActiveCfg = Release|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Debug|Any CPU.Build.0 = Debug|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Debug|x86.ActiveCfg = Debug|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Release|Any CPU.ActiveCfg = Release|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Release|Any CPU.Build.0 = Release|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{49A128D3-C3F2-46B1-8F7A-EECD209EA860}.Release|x86.ActiveCfg = Release|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Debug|x86.ActiveCfg = Debug|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Release|Any CPU.Build.0 = Release|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}.Release|x86.ActiveCfg = Release|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Debug|x86.ActiveCfg = Debug|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Release|Any CPU.Build.0 = Release|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{95D9690B-3B37-4800-A511-6FB21436638B}.Release|x86.ActiveCfg = Release|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Debug|x86.ActiveCfg = Debug|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Release|Any CPU.Build.0 = Release|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}.Release|x86.ActiveCfg = Release|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Debug|x86.ActiveCfg = Debug|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Release|Any CPU.Build.0 = Release|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{FB9FC8D7-7897-4802-9694-F379F25C00CB}.Release|x86.ActiveCfg = Release|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Debug|x86.ActiveCfg = Debug|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Release|Any CPU.Build.0 = Release|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{F4024C01-1133-4A5A-B421-22EA8CA89EA5}.Release|x86.ActiveCfg = Release|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Debug|x86.ActiveCfg = Debug|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Release|Any CPU.Build.0 = Release|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C2241050-F23C-420B-AA67-60E94B34C2B2}.Release|x86.ActiveCfg = Release|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Debug|x86.ActiveCfg = Debug|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Release|Any CPU.Build.0 = Release|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6}.Release|x86.ActiveCfg = Release|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Debug|x86.ActiveCfg = Debug|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Release|Any CPU.Build.0 = Release|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453}.Release|x86.ActiveCfg = Release|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Debug|Any CPU.Build.0 = Debug|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Debug|x86.ActiveCfg = Debug|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Release|Any CPU.ActiveCfg = Release|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Release|Any CPU.Build.0 = Release|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{98008721-C4DD-4F34-B3AE-A3453E29BB65}.Release|x86.ActiveCfg = Release|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Debug|x86.ActiveCfg = Debug|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Release|Any CPU.Build.0 = Release|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{276B8174-A24E-4257-9969-42D692F8CAC2}.Release|x86.ActiveCfg = Release|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Debug|x86.ActiveCfg = Debug|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Release|Any CPU.Build.0 = Release|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{6BCCF138-2EFB-464C-B872-E3079F0A4708}.Release|x86.ActiveCfg = Release|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Debug|x86.ActiveCfg = Debug|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Release|Any CPU.Build.0 = Release|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}.Release|x86.ActiveCfg = Release|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Debug|x86.ActiveCfg = Debug|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Release|Any CPU.Build.0 = Release|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D}.Release|x86.ActiveCfg = Release|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Debug|x86.ActiveCfg = Debug|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Release|Any CPU.Build.0 = Release|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Release|x86.ActiveCfg = Release|Any CPU
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Debug|Any CPU.ActiveCfg = Debug|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Debug|Mixed Platforms.Build.0 = Debug|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Debug|x86.ActiveCfg = Debug|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Debug|x86.Build.0 = Debug|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Release|Any CPU.ActiveCfg = Release|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Release|Mixed Platforms.ActiveCfg = Release|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Release|Mixed Platforms.Build.0 = Release|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Release|x86.ActiveCfg = Release|x86
{18B1CDB1-709D-46D4-A894-9FE0BF929686}.Release|x86.Build.0 = Release|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Debug|Any CPU.ActiveCfg = Debug|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Debug|Mixed Platforms.Build.0 = Debug|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Debug|x86.ActiveCfg = Debug|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Debug|x86.Build.0 = Debug|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Release|Any CPU.ActiveCfg = Release|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Release|Mixed Platforms.ActiveCfg = Release|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Release|Mixed Platforms.Build.0 = Release|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Release|x86.ActiveCfg = Release|x86
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{047A98B2-BC96-41B4-ADD8-2167FB1B6502} = {E29C6340-FD50-4857-8C45-7BA227646B00}
{11DC3AE9-D19F-4426-A7C8-15F17DE815BF} = {E29C6340-FD50-4857-8C45-7BA227646B00}
{549466CE-5CA6-4904-BA44-58141544BE70} = {E29C6340-FD50-4857-8C45-7BA227646B00}
{E082D395-52BE-41EE-812B-8B09C51025B4} = {7CFA8083-4960-4BFE-8DF0-16034C828CDE}
{18A4AED9-D477-4C57-9C7A-C0CBBD5599DE} = {7CFA8083-4960-4BFE-8DF0-16034C828CDE}
{051C2B3B-8CDF-42CB-9EA2-027232BFC395} = {7CFA8083-4960-4BFE-8DF0-16034C828CDE}
{8E580B45-AECD-46BF-9D63-CD8BECE24D29} = {E4B9972A-F80D-4D85-BF52-109D37856AC2}
{50E11F2C-9D49-45F5-A52D-560BE456CC04} = {E4B9972A-F80D-4D85-BF52-109D37856AC2}
{1F27CA58-54BD-485A-BC24-3B9176F62AC3} = {E4B9972A-F80D-4D85-BF52-109D37856AC2}
{95D9690B-3B37-4800-A511-6FB21436638B} = {F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}
{E04C2A53-3981-44D4-94AF-6AC07D97CDE8} = {F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}
{FB9FC8D7-7897-4802-9694-F379F25C00CB} = {F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}
{F4024C01-1133-4A5A-B421-22EA8CA89EA5} = {F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}
{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF} = {F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}
{2E78FB6A-EE17-4EE4-9D8D-BE9AE675C69D} = {F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}
{9E4C484D-656E-4E19-8741-5701D027AA51} = {F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}
{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B} = {F0743B6A-25EB-4D79-B5ED-AFB4F25C91B5}
{52542D59-25EC-4EE4-8AF2-85DE50C70EA6} = {1BB61851-D01A-4788-8033-C1821FC3738B}
{A22C89E0-B5D4-4881-A61F-4B1FD82F2453} = {1BB61851-D01A-4788-8033-C1821FC3738B}
{98008721-C4DD-4F34-B3AE-A3453E29BB65} = {1BB61851-D01A-4788-8033-C1821FC3738B}
{276B8174-A24E-4257-9969-42D692F8CAC2} = {1BB61851-D01A-4788-8033-C1821FC3738B}
{6BCCF138-2EFB-464C-B872-E3079F0A4708} = {1BB61851-D01A-4788-8033-C1821FC3738B}
{C2241050-F23C-420B-AA67-60E94B34C2B2} = {1BB61851-D01A-4788-8033-C1821FC3738B}
{CC0B949C-4F52-4DC1-9925-64DAA1CDD79F} = {70D5B6AD-813F-4CBC-AB08-60045171C377}
{18B1CDB1-709D-46D4-A894-9FE0BF929686} = {70D5B6AD-813F-4CBC-AB08-60045171C377}
EndGlobalSection
EndGlobal
+515
View File
@@ -0,0 +1,515 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestList name="Zip64" id="062b5287-5937-4490-8ce7-dc174aab4972" parentListId="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
<TestLinks>
<TestLink id="9bd237b5-7c73-1217-d2f8-10c8fc5f662a" name="Z64_ManyEntries_WinZipEncryption_DefaultCompression_AsNecessary" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2424d939-964b-40e9-0b74-daa2aab2de1b" name="Zip64_Create" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7d3d701e-ced6-7941-40ff-cdeffcbc673d" name="Z64_ManyEntries_NOZIP64" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9b898e49-7f84-a690-6983-c293a2e2736c" name="Z64_ManyEntries_WinZipEncryption_DefaultCompression_Always" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="05f70ea1-efc5-6496-c55f-c9b4173a9dd8" name="Z64_ManyEntries_PkZipEncryption_DefaultCompression_AsNecessary" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="94db1a60-3f70-a502-330b-c1eb8e930c26" name="Z64_ManyEntries_NoEncryption_DefaultCompression_Always" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e63ec32a-c23b-2b7b-5d1a-e2cb70cc6ebf" name="Zip64_Convert" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="03b6daaf-c978-4e8c-7c38-2b43d5b7a46e" name="Z64_ManyEntries_NoEncryption_DefaultCompression_AsNecessary" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4a4cd9d1-28ae-5d9a-a9a2-1c200e53cd60" name="Z64_ManyEntries_PkZipEncryption_DefaultCompression_Always" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="BZIP2" id="0da7d5a6-d8e5-458f-b91c-c8b889a07fbb" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="e74e889d-0b8a-3a62-faf6-e752c79da88a" name="BZ_Basic" storage="bzip2 tests\bin\debug\bzip2test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ca45290a-5bcc-953f-8db4-90d2f55c6516" name="BZ_Samples" storage="bzip2 tests\bin\debug\bzip2test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="436d9ee6-9c30-611b-3ebb-de774a233a73" name="BZ_LargeParallel" storage="bzip2 tests\bin\debug\bzip2test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dc14c1ad-8b4a-e07b-2126-ff3014bc2bbc" name="BZ_Error_2" storage="bzip2 tests\bin\debug\bzip2test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a57fa9e0-5677-6109-8a7d-8a69f8200d79" name="BZ_Utility" storage="bzip2 tests\bin\debug\bzip2test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2348ead7-1f19-7728-af26-d1d84d73935c" name="BZ_Error_1" storage="bzip2 tests\bin\debug\bzip2test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ac274007-9be5-a46a-607b-ba1db03f49bc" name="Bzip2_Perf" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="SFX" id="2d4d8927-3177-4d93-96eb-680df3ee845f" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="ca7fce8c-6870-3716-2051-f43e429dea2a" name="SFX_RunOnExit_Console_Args" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="01f5c8fe-5f92-ba43-d25c-61fc0e2f06a0" name="SFX_RunOnExit_Console_withSpaces_Args" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="309482f1-ba7c-4e79-48a6-9e0f42c769d3" name="SFX_Console" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4a3345f5-d2ef-7b46-e2cf-efb0e821713b" name="SFX_RunOnExit_WinForms_DontRun" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="10db8a66-4715-edfb-eaeb-3abad311325e" name="SFX_RunOnExit_WinForms_NonInteractive" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="51544b25-684e-d3a2-6c51-98067b214731" name="SFX_Save_Zip_As_EXE" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e2dbd304-9e18-3906-f7d4-fbc8e79dec21" name="SFX_RunOnExit_Console_withSpaces" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c44aa5f1-b86a-1beb-24ce-fe29d08aa09d" name="SFX_RunOnExit_Console" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0bd98235-7e9e-7b0a-4171-bb47fc700402" name="SFX_RemoveFilesAfterUnpack_wi10682" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cadc4607-9362-b49b-483e-19fe3171ea08" name="SFX_RunOnExit_WinForms_withSpaces_DontRun" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="04d28f47-3bfe-7e70-e3bd-14c3729fadc5" name="SFX_RunOnExit_WinForms_withSpaces_NonInteractive" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="60ead76a-3587-356a-1dea-d9d4867c9c3c" name="SFX_CanRead" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d0aa1cf7-ae85-59ec-2f4d-4598eaf30a17" name="SFX_RunOnExit_WinForms_withSpaces_NonInteractive_Args" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1f32b294-1e1f-778e-b81b-6ced62f5b5d6" name="SFX_Update_Console" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e0c7cbda-9e3d-80ef-eb6f-88c1a83730d8" name="SFX_RunOnExit_WinForms_NonInteractive_Args" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="InfoZip" id="357fae3d-72f6-4c56-9201-8c0d1f48e832" parentListId="8f0fa623-4d47-43c4-8b5d-ec7a7140dde1">
<TestLinks>
<TestLink id="ade63227-100a-6b1b-ec73-2c6be2c211c7" name="InfoZip_Zip_Password" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c2171337-71a3-0144-f0c6-dac177445efd" name="InfoZip_Unzip_z64_wi11936" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="485a208b-8405-131d-6081-1c976ccd9101" name="InfoZip_Unzip_ZeroLengthFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d7a58ea4-89e4-06ea-d811-50cb9c16aa41" name="InfoZip_Zip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0d3dc7cb-309e-da73-65bc-ef726bd5328a" name="InfoZip_Unzip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="aa1cf548-008b-9b79-d2f1-6b6eeef4d5ea" name="InfoZip_Zip_Split" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="WinZip" id="3ab515e5-90af-4cc1-a942-c629d28ef324" parentListId="8f0fa623-4d47-43c4-8b5d-ec7a7140dde1">
<TestLinks>
<TestLink id="dbbdf0cd-1051-f5ff-1399-cd1459858254" name="Winzip_Zip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="283865b5-6fd5-1475-5811-7be5289afa40" name="Winzip_Zip_Enhanced" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d7cbfa28-2b68-1adb-fb25-3aee9a961c72" name="Winzip_Unzip_Password_NonSeekableOutput" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fe8d0bef-5b04-8c39-c3ed-de7daab23c92" name="Streams_Winzip_Zip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5230e495-5b94-49cf-4f31-4326c5c3cfde" name="Streams_Winzip_Zip_Mixed_Password" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f626d9d1-17c1-79e4-cf26-ecc159a9061d" name="Winzip_Unzip_Bzip2_Large" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9e02dee4-a6c5-de1d-7364-45e7b6aad87e" name="Winzip_Unzip_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="deb6b797-8e4f-4459-e520-bf085fa0d474" name="Winzip_Zip_PPMd" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="71ff7745-1e90-3058-b78f-569c1c453f21" name="Winzip_Zip_EZ" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="203e4ec2-e0f9-066d-41b5-860820f00fa1" name="Winzip_Unzip_Basic" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="87e8c83d-86de-ca5f-472b-f7dacb2720b1" name="Winzip_Unzip_ZeroLengthFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="44a1098f-8429-4da3-d172-d6158afda190" name="Winzip_Unzip_Bzip2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dd39866c-128e-2df9-bfe0-19a5112c09f4" name="Winzip_Zip_Fast" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7b921657-d3aa-3b7d-a61e-c3fc0a2c7f5a" name="Winzip_Zip_Bzip2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="65a69970-1067-c98d-9729-3f75ecaccd5c" name="Winzip_Unzip_Password" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="359f7967-8793-fd41-6d4b-82fc551b9504" name="Winzip_Zip_Normal" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="74caba3f-2b42-bfee-d9c6-c45cb794255d" name="Winzip_Zip_Password" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0b72ffa2-01b3-59a0-8b75-0848e0f5e482" name="Winzip_Unzip_SFX" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6ac21f73-5864-70ac-09af-2c216e9816d3" name="Winzip_Zip_LZMA" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ce6ed451-f9b4-94d7-63fe-0576033cb426" name="Winzip_Zip_SuperFast" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Timestamps" id="4fb5a9c1-6e68-419f-8a0b-a0dcafebf48d" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="e899adf9-94f5-41c3-c7d5-a50a96201a27" name="CreateZip_VerifyFileLastModified" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4a1dc312-413f-f9b5-a10e-b036970af09d" name="CreateZip_SetFileLastModified" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8ea37a19-744e-cb71-cbdf-baeb1c751f9a" name="Create_EmitTimestampOptions" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Error" id="6bff23d4-5fa4-410d-b500-3434ce7b427f" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="9910dff4-ce24-e9ef-f260-712b3256ce87" name="Error_LockedFile_wi13903" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="da27e65b-e4b0-91c4-6253-b94bf57614e3" name="Error_ReadCorruptedZipFile_Passwords" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="511162b4-853f-d50b-52ab-edb46893caba" name="Error_Extract_ExistingFileWithoutOverwrite_InvokeProgress" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b2ed5032-d348-183f-fecb-f1b22ae1bc62" name="Error_ReadCorruptedZipFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5528060d-08e7-9b35-e451-b39c94b3fbba" name="Error_Save_NonExistentFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="458b6319-1008-bccb-c811-c00db6138011" name="IncorrectZipContentTest3_wi10459" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="be3a8fba-1861-43ed-e0ca-6e15f38069af" name="MalformedZip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ea7f9d35-be32-7bb0-dd60-44803c74ec02" name="Error_Extract_ExistingFileWithoutOverwrite_InvokeProgress_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ad737b2a-4653-97cd-8132-abc8f27ffe79" name="Error_Extract_WithoutSave" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dfc8c2a1-4930-b2e4-adac-c3151596a7d6" name="Error_UseOpenReaderWith_ZIS_wi10923" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="51752292-2702-34ed-ea9d-f25cfc8c5c4b" name="IncorrectZipContentTest2_wi10459" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f31d12c4-b9bc-463b-d2c1-ae60006f5819" name="Error_Save_NoFilename" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="54ff2b83-caba-4c04-373a-3ac70dd78597" name="Error_AddFile_NonExistentFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a023dc7b-4a15-f6d7-a826-45f6a770aa3e" name="IncorrectZipContentTest1_wi10459" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6f14d065-e9e6-081c-b2c4-1b763b713b3f" name="Error_Save_InvalidLocation" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e5ee4209-6235-8e0c-83f3-462fb6ab6974" name="Error_EmptySplitZip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="eb1228ab-a864-b741-cc3e-8063e4af5aab" name="Error_AddFile_SpecifyingDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b16c6ab8-8867-a1ad-c173-02fa68378899" name="Error_Read_InvalidZip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="48f93d26-5a31-6677-3352-809d8f53a6a8" name="Password_CheckBadPassword_wi13668" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="bdcf2c7a-6aeb-a64f-8f97-30882e54ab90" name="Error_Extract_ExistingFileWithoutOverwrite_Throw" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="07630623-590d-959d-d60a-8caeed9e02c5" name="Error_AddDirectory_SpecifyingFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d6fe908b-65ee-93ac-584f-b90e84381656" name="Error_FileNotAvailableFails" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="29e592f1-14b7-266e-6dda-759993020251" name="FileNotAvailableFails_wi10387" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5dff33a8-7e95-5969-a340-bdec1d70d87c" name="Error_Read_WithoutSave" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0124c549-1d97-5eda-f1b3-7dd64e12f1a2" name="Error_Read_EmptyZipFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ba98ed3c-9cc9-d7ad-904a-12ef96379193" name="Error_UseZipEntryExtractWith_ZIS_wi10355" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1a9b95a4-5862-0450-80e6-3e10d7f5c1a6" name="Error_ZipFile_Initialize_Error" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9a2f6187-060b-0a81-6bfd-e690ae4120fa" name="Error_Read_NullStream" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="543dcad7-0946-c47c-9411-d795b8762460" name="Error_AddFile_Twice" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="22dd8256-1798-cd23-fa61-6a22e5f1418c" name="Error_Extract_ExistingFileWithoutOverwrite_7" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="13e9c84c-9251-6904-1d9d-1998f429a4e2" name="Error_NonZipFile_wi11743" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b95f71aa-ce97-f444-715a-4c18e212b8f3" name="Error_Extract_ExistingFileWithoutOverwrite_NoArg" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6" />
<TestList name="AES" id="8d4861ea-d02a-4cca-b9b3-0dba59979d39" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="f0d9a759-b74b-585a-c5cf-ee672df87672" name="WZA_ReadZip_Fail_NoPassword_256" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fdfb7614-8d5d-5c9d-26d3-1ad676bb15f1" name="WZA_InMemory_wi8493" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="95a52583-5242-097f-e4e8-232e4737bafb" name="WZA_CreateZip_DirectoriesOnly" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2a40b9e9-9efc-f007-952d-6906af257bf6" name="WZA_OneZeroByteFile_wi11131" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8a86198c-da89-cce4-877c-1f046cc4e888" name="WZA_CreateZip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f10cd3ae-c8da-688a-da4d-e7723e3abe81" name="WZA_ReadZip_Fail_NoPassword_128" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8789fad8-35f4-aaab-114a-adcc04759c0d" name="WZA_CreateZip_EmptyPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="888932ef-cb4f-a0ac-5ddc-d1f952a78fe6" name="WZA_MacCheck_ZeroLengthEntry_wi13892" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="06ba6235-449d-b78f-8d30-23e843ffa9cf" name="WZA_Update_SwitchCompression" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="eee28b6b-5c0f-7c7e-a4e7-e6f24a68026c" name="WZA_InMemory_wi8493a" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c7f7ed15-41a3-0bc1-e2a0-ff785d05e967" name="WZA_CreateZip_NoPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="053f4402-312e-080f-7966-61959f016334" name="WZA_CreateZip_VerySmallFiles" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b8a22f6a-4737-0642-95f8-657149933e70" name="WZA_ReadZip_Fail_WrongPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="45f823c1-a3d7-9fbf-323b-6526edde4db9" name="WZA_CreateZip_ZeroLengthFiles_128" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="69eec4c9-8a27-99b0-1b6a-5870e9f8cfc3" name="WZA_ReadZip_Fail_WrongMethod" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="28eb9cea-f0a1-ee01-8c5c-ab2a95bd51b0" name="WZA_ReadEncryptedZips" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="05d67599-43b1-40c2-5adf-82b0137b9271" name="WZA_CreateZip_NoCompression" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d6c27364-a61d-c833-ad3f-a60449e10cc6" name="WZA_CreateZip_ZeroLengthFiles_256" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f32909f1-c14b-b9b4-80af-123db8f92df4" name="WZA_CreateZip_ZeroLengthFiles_NoPassword_128" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6c511f28-bdb0-bb9c-bda7-1f211b92a388" name="WZA_CreateZip_ZeroLengthFiles_NoPassword_256" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="878268a6-1c42-8900-de37-3431c3efff7a" name="WZA_SmallBuffers_wi7967" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="30d7d94a-1f29-698e-6159-5dad2d5aa211" name="WZA_RemoveEntryAndSave" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f1405daf-8936-0f64-5ec3-82abd9888416" name="WZA_ReadZip_Fail_BadPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Compatibility" id="8f0fa623-4d47-43c4-8b5d-ec7a7140dde1" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="b9d2116c-3530-3010-e013-767da889f3fd" name="Extract_WinZip_SelfExtractor" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cd31daab-b732-9a61-571d-4738b8188fa9" name="COM_Unzip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ba167bee-124a-0434-efca-cae4b7be8532" name="ShellApplication_Zip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="60877a4c-2bab-080e-a918-e5b9d3012a60" name="Extract_Xlsx" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1ebb2aef-f572-2ca1-a73f-fafa301f4ffc" name="ShellApplication_Unzip_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="87fa95df-1529-f07e-b412-9701c00e8511" name="COM_CheckPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6db210e8-335d-7b8f-e7b4-9cdcb6796385" name="Extract_InfoZipAppNote" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d125092f-f97f-e447-31ed-0c1d485dde40" name="VStudio_Zip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a722837d-a992-6186-adbd-1ac60a17df90" name="ShellApplication_Unzip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="eb804e88-66a3-ae56-1061-4d64e6b79c92" name="ShellApplication_SelectedFiles_Unzip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4ee2d89e-896d-a8c3-56dc-fc00cb26fd48" name="COM_Check" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2f6caa43-fb18-fbcb-ff75-3e493fdbd55e" name="ShellApplication_Unzip_NonSeekableOutput" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e7e7baed-7efa-3be5-3061-7ff338405f3f" name="COM_CheckError" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f835c543-5808-8ab1-d246-e31efa3c6a76" name="Extract_Docx" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1ff0f0af-c856-1764-e5e7-995a2a477136" name="ShellApplication_Zip_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f4ef6584-43ab-1a3a-aff7-fbad16da54c5" name="Perl_Zip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="99d784a8-bbf5-6196-2c04-fe4fdf514a66" name="Extract_AndroidApp" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="bd947231-2b5d-338e-59ec-26bacec7a8cd" name="Extract_DWF" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ec77c2de-4c82-e2bb-3d06-8f17e3b06ead" name="COM_CheckWithExtract" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9a7040e0-7624-8bc7-2d31-3cd671e794ac" name="VStudio_UnZip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e32f4d58-723c-3b7a-e14a-f53ad4f2028e" name="COM_Zip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Selector" id="92191775-b6d2-4e4e-841b-92cdfb668e93" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="cb71aaa3-757a-8893-e0a0-9bd91ea716d4" name="Selector_SelectFiles_DirName_wi9176" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="295e62d5-073d-682e-cc1b-61b076fc84a5" name="Selector_ExtractSelectedEntries" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="51cbf06f-e6d0-a67c-bc16-9e7346793ac4" name="Selector_SingleQuotesAndSlashes_wi14033" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d6d6f38a-2f3d-d306-0f99-563ee8d4a196" name="Selector_SelectFiles_BadSyntax09" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="eec47eb1-9499-068c-f4ee-b6e9f6a39b6d" name="Selector_RemoveSelectedEntries_Spaces" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b28873ba-922d-f594-b809-4673f71849ca" name="Selector_Twiddle_wi10153" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="57c6b650-becc-ea65-69bc-58d221f52eb6" name="Selector_SelectFiles_BadSyntax24a" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="045768e4-f94d-6283-ba43-1b5a14082076" name="Selector_SelectFiles_BadSyntax16" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="3bdbd25d-af42-a350-33fa-0cba97d08fbb" name="Selector_RemoveSelectedEntries2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a267a1cf-1519-9002-ae21-ae6b07d531e1" name="Selector_SelectFiles_BadSyntax18" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="408edecf-98da-9154-77b3-767af037724a" name="Selector_SelectFiles_BadSyntax17" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="71974874-c3ce-d162-baf9-5db2f1d5ba52" name="Selector_SelectFiles_GoodSyntax01" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8e2b5b83-5c1f-1833-27a6-61ee1cac9bb7" name="Selector_CheckRemove_wi10499" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6bb4a50a-a4eb-e086-6e66-134c04fe713d" name="Selector_EdgeCases" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f2174db3-112e-ff92-a2e0-61a8054934e1" name="Selector_SelectFiles_BadSyntax22c" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f01f10ea-7d49-1a4f-7987-1920db05eca8" name="Selector_SelectFiles_BadSyntax02" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7f0852b2-3502-853f-8c9f-48f2b4977365" name="Selector_SelectFiles_BadSyntax01" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="683b3a8d-0a6d-b29c-e2b3-9086de4b0193" name="Selector_SelectEntries_Fullpath" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="81200ab0-f085-155f-f50e-9d5989a9fc3f" name="Selector_AddSelectedFiles_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c9ffd870-1afd-b9f9-c4ed-4d784d6da06c" name="Selector_SelectFiles_BadNoun" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="69e6a3ba-07af-5995-5fa5-1badea85dac3" name="Selector_SelectFiles" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ff5dce38-ac5f-7571-294e-e8406aae939a" name="Selector_SelectFiles_BadSyntax19" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="bbbaf0f3-2e17-da67-f8e9-30a505ef1aad" name="Selector_SelectEntries_subDirs" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4f468b04-1547-3b36-aa5b-86f373c3af96" name="Selector_SelectEntries_ByName_NamesWithSpaces" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d99c47a4-2067-3119-50cb-eda26304600e" name="Selector_AddSelectedFiles_Checkcase_directory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e2277dfa-fd46-c986-540a-b403c068ddce" name="Selector_SelectFiles_DirName_wi8245" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6ef9a56b-0169-2670-21af-8794817963b6" name="Selector_SelectEntries_ByName" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7fa754fb-30b9-5423-ced5-c3dc2e177fc9" name="Selector_SelectEntries_FwdSlash_wi13350" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7b35d141-6208-e3f1-3227-88cff93d8712" name="Selector_SelectFiles_BadSyntax12" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e200c436-f081-87a1-c68c-70ffaf648417" name="Selector_SelectFiles_BadSyntax08" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d2e1b1ea-597d-5406-785a-eda1a09a4a8f" name="Selector_SelectEntries_ByTime" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c8ba0ffe-a380-6d96-a601-f29e548782e6" name="Selector_AddSelectedFiles_Checkcase_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8b88191d-7dd3-f00a-961c-b6746fffe3fd" name="Selector_SelectFiles_BadSyntax22d" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c58a172a-2cd3-2ebe-8e8d-3b28ff01f12b" name="Selector_SelectFiles_BadSyntax22b" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="416b932c-2dd1-69d0-656d-ec9b43c5e9d9" name="Selector_SelectFiles_BadSyntax03" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="921649e1-56eb-598b-27ea-df7a14ba67e3" name="Selector_SelectFiles_BadSyntax10a" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cdaf8a55-2c7c-aa71-199e-bc266c19e4cc" name="Selector_SelectFiles_BadSyntax14" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d2c4be58-ba95-5a9e-6ed5-f386609bbdc9" name="Selector_SelectFiles_BadSyntax20" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e87c4eba-1a21-c4c1-e531-1f6089404227" name="Selector_SelectFiles_BadSyntax06" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="658c3a66-715b-0151-3c11-ff2784d6bfeb" name="Selector_AddSelectedFiles_Checkcase_directory_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="920d98db-4aa7-0f7b-7556-35d8f6e68a2d" name="Selector_SelectFiles_BadSyntax07" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5e195633-5a5a-951f-e556-0b0e621681a3" name="Selector_SelectFiles_BadSyntax24b" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="447044d4-4362-0230-661f-acb8ad443362" name="Selector_SelectFiles_BadSyntax10" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="aca2bce0-d87b-9322-bf30-ba3e5d6af1a8" name="Selector_AddSelectedFiles" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="37abb79b-1e5a-f97d-0223-12b02972d4c1" name="Selector_SelectFiles_BadSyntax21" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4e263eef-93dc-6837-80b2-0fca559075a8" name="Selector_SelectFiles_BadSyntax11" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a1cc1474-5cd4-13c1-897e-edb233039722" name="Selector_SelectFiles_BadSyntax15" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="99384341-d492-42fc-298b-aa36aabdce8c" name="Selector_SelectFiles_BadSyntax22e" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="59ae25e8-da2b-3ed4-dbb0-e4914826528b" name="Selector_SelectFiles_BadSyntax22a" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d8da9e66-de0c-e8e6-d342-50061d91fad2" name="Selector_SelectFiles_DirName_wi8245_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="867259d8-618d-9eec-1f52-03cd252e5a00" name="Selector_SelectFiles_BadSyntax23" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8fff1707-b2e4-bdac-d459-02a468e83998" name="Selector_Normalize" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b6d4b369-9b8d-1e3a-a9a3-244736f2abe5" name="Selector_SelectFiles_BadSyntax04" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8a95349c-3510-808f-b3e7-f803892e0063" name="Selector_SelectEntries_NestedDirectories_wi8559" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8a33fcbb-34fc-66e4-4ae0-e08e1533028a" name="Selector_SelectFiles_BadSyntax13" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="13f080f0-400b-2950-c48c-638f4edaeb7d" name="Selector_SelectFiles_BadSyntax05" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Unicode" id="9aac30c6-9197-4042-b69a-8403fafea90a" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="48a969d6-1c7b-2ec0-dcd6-8de0fe7867df" name="CodePage_UpdateZip_AlternateEncoding_wi10180" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="286dd9ae-2c85-6cfa-81dd-5ebe9f098bb1" name="UnicodeUpdate_wi12744" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b52a18b2-ba00-286f-0e6a-e2b703ce3953" name="Unicode_AddDirectoryByName_wi8984" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="af2551f8-f001-6e88-4ba5-b23d989262b9" name="Create_UnicodeEntries" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4e76cb0c-4ce0-c79a-32e4-38c090aaaa0e" name="Create_UnicodeEntries_Mixed" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="60a7a11a-8e2b-8d94-72e4-87cb02c9ddc2" name="UnicodeComment_wi10392" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="User Interaction" id="aaeea4fc-e4e1-44dc-bf43-2550b0e30d97" parentListId="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
<TestLinks>
<TestLink id="e3cabef8-ec2a-eeb3-7e9b-95551048aa29" name="SFX_Update_Winforms" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2ae26471-2a1f-4dfc-fc18-0d2ea33a78f8" name="SFX_WinForms" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b853a416-abaa-0aa4-bf82-477d9f07d432" name="Retrieve_ViaIndexer2_wi11056" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="32dd669f-4bf5-26f5-28a5-6285fe470466" name="SFX_RunOnExit_WinForms" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d713cb36-ab8e-1ccd-ec53-ec83ee9204ee" name="SFX_RunOnExit_WinForms_withSpaces_Interactive" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="92127717-4f68-6912-5f47-00bdbdcf71d3" name="SFX_RunOnExit_WinForms_Interactive" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ef123853-115a-0439-8ab7-feeeee6a02e1" name="SFX_RunOnExit_WinForms_withSpaces" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Basic" id="c303270d-9756-406f-9e3c-4ffa1835c438" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="089bcbf6-c3f4-1a30-1b8b-6b2e3747e529" name="AddDirectory_ReparsePoint_wi8617" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b831a396-80c2-905d-7262-aa19e50f4e38" name="CreateZip_AddFile_AddItem" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="87a3abd3-00be-8e62-6803-b838bd5fc6bf" name="BZ_Utility" storage="bzip2 tests\bin\debug\bzip2test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="48a3e66d-1a62-7050-7174-5d8e31c87d6b" name="Password_UnsetEncryptionAfterSetPassword_wi13909_ZOS" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7319ac84-786f-6673-bad7-45440ff2c204" name="AddDirectory_ReparsePoint_wi8617_Error1" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="20ed8321-ab92-b1ac-229b-cfcde859281a" name="CreateZip_AddDirectory_OnlyEmptyDirectories" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f2c9fecc-28bf-5954-2c1a-a1ecd6522231" name="CreateZip_AddDirectory_OneCharOverrideName" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8ea4b4d8-2b61-72d8-8de6-896fa3a6373c" name="CreateZip_AddEntry_String_BlankName" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="94c88c09-7011-9d37-66ae-ef95085330de" name="CreateZip_AddFile_OneZeroLengthFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="405a55fc-d1cc-f3b5-a1f6-12e76fe936f6" name="Extended_CheckZip1" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dfbc0e99-7683-96d5-f3ad-c8f06253fea4" name="CreateZip_SetFileComments" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="36d5ff3d-a2a4-41d3-71bb-573955cec02e" name="CreateZip_AddDirectory_NoFilesInRoot_WI5893" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a70243ab-aa08-3f68-9611-a3d1248479ef" name="CreateZip_AddFileInDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="060b83a1-47aa-288b-804e-d6740cb79c44" name="Password_CheckZipPassword_wi13664" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="219e1da5-2158-b32e-dc0c-625b807ad64a" name="CreateZip_AddFile_CharCase_wi13481" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cf87845b-ac4c-1de3-b777-df5e05169cef" name="ContainsEntryTest" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f9ae787f-5559-badb-963b-013db2a7af9e" name="Basic_IsText" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d8862b12-7186-db82-d517-ddfe8a3d336e" name="CreateZip_WithEmptyDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fedb9093-0382-7cf3-251f-fca1bba69917" name="Create_ZipErrorAction_Skip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="89901466-8a4c-60e2-3596-e878661face1" name="CreateZip_AddFile_VerifyCrcAndContents" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f0490dd8-c020-9552-e761-bded7a305650" name="CreateZip_AddDirectory_Nested" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b91dbfc6-d7ce-0ca1-abba-1fdaa645d2cb" name="CreateZip_AddFiles_PreserveDirHierarchy" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d88dfee9-b23a-86e4-5aa4-49f214efa40c" name="ExtractAll_Cancellation" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8ac76d9d-105a-e9f1-c7e0-36d914722412" name="Extended_CheckZip2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f900ea9c-83a8-b458-dce4-458a752f45dd" name="CreateZip_AddFiles_LeadingDot_Array" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="40d00a6f-1e8b-f6a0-fac1-f096b3b42800" name="Extract_ImplicitPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7587d26a-6fe8-b170-4eea-c4704d6ddc10" name="Extract_MultiThreaded_wi6637" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b2a15b0f-4d24-c3a5-7805-b7c02270a012" name="CreateZip_AddFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b31782ef-b1be-258d-bff6-9b4434a61771" name="Create_RenameRemoveAndRenameAgain_wi8047" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e2c48ab8-c071-e901-d4a6-53e9a6f29a15" name="CreateZip_AddFile_OnlyZeroLengthFiles_Password" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cde2e3fe-1ef0-8742-517a-751ea8cb962a" name="ExtractAll_WithPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6ad6340c-95a5-581d-9fd1-d91cf161ff49" name="Extract_AfterSaveNoDispose" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="885398ee-ae8e-cd9d-00e5-8874f5bb8b6c" name="CreateZip_AddDirectory_OneZeroLengthFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="64b83d18-368c-9c6a-15e7-b7a6c16e13d5" name="CreateZip_AddDirectory_CheckStatusTextWriter" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6492a239-fc70-e28d-0d93-cad2b45c4176" name="Password_BasicAddAndExtract" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="71549f1c-b045-10cf-491d-3cb660832d3a" name="Create_ZipErrorAction_Throw" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1453b1d3-7198-b92c-e7e9-ba25be5f3e7d" name="ReadZip_DirectoryBitSetForEmptyDirectories" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c5d6abf4-12e2-e1c9-b99a-2bc17c681de5" name="AddFile_CompressionMethod_None_wi9208" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="357b5a4f-ef03-7911-f355-b582a671159b" name="Create_SaveCancellation" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0a9f4861-5eed-beeb-4cf5-a1162c6db639" name="Test_AddDirectoryByName_Nested" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fb04c2f3-bb25-7840-566d-8f42dee58a9c" name="CreateZip_AddEntry_ByteArray" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ac568db9-2b0d-653e-b8b1-9d2dca9a980b" name="Password_Extract_WrongPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="812dab2d-112e-b431-3f8f-e88e7c55f8cc" name="SilentDeletion_wi10639" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="455ec4bb-eff1-94f5-a123-f3d2856ab75e" name="Extract_ExistingFileWithOverwrite_OverwriteSilently" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0257355d-5f9d-da41-e23e-513965d6529c" name="Test_AddUpdateFileFromStream" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1daaebc3-4351-3e5e-10f0-496df89dcf64" name="GetInfo" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f3410463-74b4-92ef-74c0-d20e9850f7d6" name="CreateZip_UpdateDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="16f55d11-b208-eadb-1fdf-874026ff4dcb" name="Basic_SaveToFileStream" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a3d29559-0f2f-8e0b-212c-403cbc8793cd" name="Password_MultipleEntriesDifferentPasswords" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e6cae85d-54d0-7530-3687-f8d3f00b37b0" name="Test_AddDirectoryByName_WithFiles" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fd2a57c2-a81c-4370-7d6a-fafb79dcee71" name="Extract_ZipWithDuplicateNames_wi10330" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9c3304b9-3a42-cd17-0131-1a4b5fea3339" name="Create_DuplicateNames_DifferentFolders_wi8982_PreserveHierarchy" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="88e60631-37ca-08a8-2e6e-8ad34c15d2ee" name="AddDirectory_ReparsePoint_wi8617_Error2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4f10bce8-1924-0a4d-f2f7-adff27ff5ec6" name="CreateZip_ZeroEntries" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5d1fde51-3c20-e7df-f020-38e1af11e0ee" name="CreateZip_AddDirectory_BlankName" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f3630308-e2ff-c304-9da3-f4a1cdc71365" name="Progress_ReadFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="80383ac2-02b0-f1e6-f478-a6e51a77ff15" name="Password_AddEntryWithPasswordToExistingZip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="97c59df3-e05c-f96a-2e04-c896e2a449ee" name="Create_AddDirectory_NoFilesInRoot_WI5893a" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cd3daecc-a551-78e8-e9dd-e3d2a73279a5" name="CreateZip_AddItem_WithDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8918bc0f-7c52-a70e-2f07-d5ab4b33121a" name="CreateZip_AddDirectory_OneEmptyDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cbe7ee48-eb20-f6e7-70c4-edd10cabd487" name="Create_ZipErrorAction_RetryAndEventuallySucceed" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="811c21f6-7b6f-a0a4-ec84-7abd86374432" name="Create_AddCancellation_wi13371" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="97ccefbb-a983-e48d-8b97-235668f67239" name="CreateAndExtract_SetAndVerifyAttributes" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a7587ba8-8b2f-2eca-80ff-e0d4118589b6" name="ReadZip_OpenReader" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="76c2a7f1-ec4a-1658-4fe8-d2cd8be9b3dc" name="Create_ZipErrorAction_RetryAndEventuallySkip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="69042ed4-e353-b83a-406e-21a2739ddf67" name="Retrieve_ViaIndexer" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="741b15ce-65b2-3917-6644-df6002461c64" name="CreateZip_AddFile_OneZeroLengthFile_Password" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a6ff87e1-04ce-0eb1-08c8-be2b3a094d6d" name="Create_WithEvents" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a31ba60a-29b6-37ab-3621-4b164fab0bf6" name="CreateZip_CompressionLevelZero_AllEntries" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5581bb37-481c-e419-bad4-aff0f6261449" name="CreateZip_VerifyThatStreamRemainsOpenAfterSave" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="8631696a-c2c2-bfed-a2cc-658578b3b57a" name="Create_DuplicateEntries_wi8047" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="06a75db9-85f6-a827-dbc9-eea80e8e86d6" name="CreateZip_AddDirectory_OnlyZeroLengthFiles" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="09dddf89-547c-dc1c-442c-8d22463b1c0b" name="Extract_IntoMemoryStream" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="3af2c023-9643-69dd-af35-13b4451f2611" name="Create_WithSpecifiedCodepage" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="396ead04-09c9-e58b-b773-b773451102be" name="Create_WithChangeDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="099b08da-d215-ff89-6b5d-7649ec4a2827" name="CreateZip_ForceNoCompressionSomeEntries" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="da60eea7-00ab-9de3-5c69-46244b8e1bfb" name="Password_UnsetEncryptionAfterSetPassword_wi13909_ZF" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="89878f72-1465-c63d-0eef-937e139a5397" name="Test_AddEntry_String" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="63523520-dabb-8e12-fdc4-7703b2f71896" name="CreateZip_AddFile_LeadingDot" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="918b268a-1126-d591-7aab-5dc8c9403c3a" name="CreateZip_AddDirectory_NoFilesInRoot" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="600ea47f-66e7-277e-4a16-df09cc9d6721" name="Create_ZipErrorAction_RetryAndEventuallyThrow" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0e30917f-e794-6ae1-3d95-4b06dac20be6" name="TestZip_IsZipFile_Stream" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="70a9725d-5ddf-e06d-d051-570f0b84ae7d" name="CreateZip_Basic_ParameterizedSave" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4b79d0e6-0856-0328-4622-1a337949d086" name="Create_DuplicateNames_DifferentFolders_wi8982_flat" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d0af8239-d955-01c5-7919-eb4acaf3e95c" name="CreateZip_AddDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="659f4db4-60c4-02e8-0a29-12264c0edf46" name="CompressTiff_Level9_wi8647" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="3a72f18b-1e98-73f1-a611-65cacf8dbb45" name="BZ_Samples" storage="bzip2 tests\bin\debug\bzip2test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a6b353a3-decd-4d3f-aead-01e6c8c675c1" name="Progress_AddFiles" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2bdd82a3-7844-7413-3f88-65050f130ccf" name="TestZip_IsZipFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1dbc04af-7f38-3f6b-e069-234c466d272e" name="Extract_ExistingFileWithOverwrite_DoNotOverwrite" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a576809b-7c5a-6d08-6691-aadebcf1abc6" name="CreateZip_AddFile_OnlyZeroLengthFiles" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0e6a9bdc-1d7d-88fc-e881-d2c05bc07723" name="Extract_ExistingFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a07fc79a-c904-19ad-d65d-7bba279cd065" name="CreateAndExtract_VerifyAttributes" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0ea7f005-3d96-e5fd-c756-9927a8392155" name="Test_AddDirectoryByName" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a04b727b-cc11-c8be-192c-1102715fe672" name="CreateZip_AddItem_NoDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="ZLIB" id="c362c3e5-88b9-414b-af04-c08e9087ca78" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="337f07fd-438c-2022-d71f-5fba537c17a4" name="GZ_Utility" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="84c6cea1-7280-c930-f7d0-429743883a86" name="Zlib_DisposedException_DeflateStream" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a6396752-4caf-cf22-c0b7-62dbecf3086f" name="Zlib_BasicDeflateAndInflate" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="023ace8f-d206-449c-9c4a-8321952d1dcd" name="Deflate_CompressString" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ad8f57a3-2724-c76c-d9f3-432bd0cb3ce4" name="Zlib_TestFlushSync" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1a28d3ec-fc0a-cbe0-4124-f9ed90b9de0e" name="Zlib_ZlibStream_CompressWhileReading_wi8557" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="daa43117-3c1a-6d90-2705-872b2e802429" name="Zlib_CodecTest" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1b0ca01d-5003-e033-4ded-671f120f4325" name="Zlib_GZipStream_DecompressEmptyStream" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="07514067-a518-91f7-4fa3-ffcf18470889" name="Zlib_CompressString" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="154a161f-369f-dc1b-ae0c-5db2bf434200" name="Zlib_DisposedException_GZipStream" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ff9d25f1-6fed-29e0-3d67-422fc2a9588d" name="Zlib_ZlibStream_CompressWhileWriting" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a120c579-b641-653a-1dce-461dcc6fc742" name="Zlib_DeflateStream_InMemory" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9115f6ee-df23-e79f-7b39-372fede1dfe7" name="Zlib_DisposedException_ZlibStream" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="66db2fcf-93bf-1d7b-af12-97009c6c6ebe" name="Zlib_GZipStream_FileName_And_Comments" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e21ff60a-c1cd-b658-e096-b4e78bb1dd60" name="Zlib_ZlibStream_DecompressEmptyStream" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fd0a600f-838a-da55-d0e0-e4117b52edb1" name="Zlib_DeflateStream_wi8870" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cc831766-cf0f-c58d-0dd2-57d9b3f360f2" name="TestAdler32" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="db2ad9f5-dd02-ed17-3410-526677f129de" name="Zlib_GZipStream_ByteByByte_CheckCrc" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="00e6153b-8ddd-7045-9018-7fc09571ab05" name="zlib_Compat_decompress_wi13446" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0854bb6c-8a72-d91a-3b6b-139e38304e0a" name="Zlib_Codec_TestLargeDeflateInflate" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e853cc77-14bb-a7c3-feec-7a1726b58507" name="GZip_CompressString" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7d939ebf-cdbc-3405-7943-dc56715a03f1" name="Zlib_BasicDictionaryDeflateInflate" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a9cb3ce8-ac41-f933-4266-ae44f7b3736d" name="Zlib_ParallelDeflateStream" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="22a8c06b-ee80-cf72-7e79-bc46442e2b84" name="Zlib_CloseTwice" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9bcbaa13-7764-28ff-80d0-7ae63d277056" name="Zlib_Streams_VariousSizes" storage="zlib tests\bin\debug\zlibtest.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Long Running" id="cd669112-75c8-417b-ac90-6049c766dd69" parentListId="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
<TestLinks>
<TestLink id="54f5ba96-398e-1114-8955-687855f91b49" name="Zip64_Over_4gb" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4570b604-0662-3f2e-eb94-ff6cc863cb1a" name="CreateZip_AddDirectory_LargeNumberOfSmallFiles" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c86c5bee-7c10-e4a6-682d-9cd73763e6af" name="ZipFile_PDOS_LeakTest_wi10030" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5b3382e1-dd78-8d2d-3d97-9a6a2f601f59" name="Zip64_Winzip_Zip_Huge" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="102b3e3e-e681-be84-adaa-07077afa6e1c" name="Create_LargeSegmentedArchive" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a00fe176-d7d3-9203-9f6f-bfbbb52d828d" name="Zip64_Winzip_Unzip_OneFile" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f9112a80-830a-3a93-e9c5-3341bf16ef46" name="Zip64_Update_WZ" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0412040b-48b6-3f05-27bc-94bb380aac77" name="Zip64_UpdateEntryComment_wi9214_WZ" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9ac39d8c-5bf5-8f55-9ba7-4025bd770a42" name="Zip64_Winzip_Unzip_Huge" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="14f3b5b2-0961-16d1-100c-8dc885c990c6" name="Zip64_UpdateEntryComment_wi9214_DNZ" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="82484a68-99ff-d0ac-be76-ec74e6f55180" name="Zip64_Winzip_Setup" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d68c19b6-8246-dbfb-0663-c85e8de82806" name="Zip64_Update_DNZ" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Standard" id="e5a6877b-215b-479d-9219-4715b78b761f" parentListId="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
<TestLinks>
<TestLink id="f5f86496-1ac2-3141-5186-297e2eba6aab" name="LargeFile_WithProgress" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ef6a4906-38fa-43e6-78db-dd1930dda9f1" name="SortedSave" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a17c5cd8-8a8e-1abf-c2d8-32c45f009d3e" name="ParallelDeflateStream_Create" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dcce85d9-a0b5-0343-4fbe-3fd6f143dd15" name="ParallelDeflateStream_Create_CompareSpeeds" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="68a2c3fb-244f-8f9a-9cf4-0be2e09f9606" name="DoubleSave_wi10735" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b6a25ff7-249c-043e-fce0-2a23422a10c5" name="ParallelDeflateStream_Create_InvalidThreshold" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Update" id="ee73cc87-9938-4391-8482-6441673b362c" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="460c75f7-ab0b-4460-d7ce-1baee27b076c" name="Resave_CompressionLevel_1" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5404f936-3219-da88-a303-66b69d22fbc8" name="UpdateZip_RemoveEntry_ByFilename_WithPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="582406f8-7edb-582f-47f0-b72b5fc8a4c1" name="UpdateZip_ChangeMetadata_AES" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cb0206ab-7e2f-f3ae-8030-eea3f54222f2" name="Resave_CompressionLevel_0" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5d945142-8968-1bc3-be96-d2d1ee6764da" name="UpdateZip_UpdateFile_NoPasswords" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="952cb1cc-1681-69e0-ff47-2d3cb4b7acc0" name="Update_MultipleSavesWithRename_wi10544" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c174185e-be83-ea8e-7d01-309ba839659d" name="UpdateZip_RemoveEntry_ViaIndexer_WithPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="28f2688b-24d4-f17c-2eca-fcdf203c496b" name="UpdateZip_AddFile_DifferentPasswords" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a408c63e-c399-0361-d77e-f2951db2d154" name="UpdateZip_RemoveEntry_ByLastModTime" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dd46b7a7-8093-cc14-ac78-5b4eb87602e4" name="Resave_CompressionLevel_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="02b2240b-a2da-a3fb-c20c-6f11713a9861" name="UpdateZip_UpdateEntryComment" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="eb340ef0-7b73-288d-c92c-de15b0bdc3b8" name="UpdateZip_UpdateItem" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7a98346f-a230-661f-e424-e78295f40c3f" name="Resave_CompressionMethod_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a08f8c6a-615b-4b9e-a796-0cd2ccee6d1b" name="Resave_CompressionMethod_1" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9451e8fd-6f7a-565c-fa78-d75df5093999" name="UpdateZip_UpdateFile_DifferentPasswords" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2407b113-7746-964a-6b28-8a703e68613e" name="Resave_CompressionMethod_3" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fa9a39e2-916e-dbe7-7309-2998e7a0e065" name="Update_FromRoot_wi11988" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e31d5b70-bbf5-4c7f-573f-85dd3cb9aed0" name="UpdateZip_AddFile_ExistingFile_Error" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="af9c1c0d-1bf9-2331-7017-6db14dc68773" name="UpdateZip_AddNewDirectory" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5625df5b-827a-9cc0-452b-6bdf16a46607" name="UpdateZip_AddFile_NewEntriesWithPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="32f625a9-ba34-acc1-f73e-76f520c67797" name="UpdateZip_UpdateFile_2_NoPasswords" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="3d8a0bda-0e3e-a3d9-7f4d-c41d2238c209" name="Resave_CompressionMethod_0" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a80114ee-a9ce-0947-febd-5ff1ef1315fa" name="UpdateZip_RemoveEntry_ByFilename" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4910ac7c-0d8d-a1e8-461c-a785838bf37b" name="Resave_CompressionLevel_3" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="df6bdca8-bc1d-9711-1268-05b646d41db1" name="UpdateZip_UpdateFile_NewEntriesWithPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="49cdd7fa-c6bd-381d-269f-29343f748c62" name="UpdateZip_RenameEntry" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c0febcff-db53-af5f-c91b-ddd3e85bbba2" name="Update_MultipleSaves_wi10319" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9c0c66f0-31f8-5568-d5fa-25fa8e162e7e" name="UpdateZip_RemoveAllEntries" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="384431fa-af3a-3d20-e24d-a85915f8a189" name="UpdateZip_UpdateFile_OldEntriesWithPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="29adce48-a62b-7065-7a87-59ded50d909c" name="UpdateZip_AddFile_OldEntriesWithPassword" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="865106b3-6e26-d67a-3a0a-ac3059a57e82" name="Update_MultipleSaves_wi10694" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Segmented" id="f34406a7-afdf-47a6-9545-28b627753ee4" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<Description>testing spanned or split steams</Description>
<TestLinks>
<TestLink id="5059da44-0af3-1ac0-4ef7-045bf4cc34bb" name="Spanned_InfoZip_Zip_wi13691" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2ae52957-159b-d239-a5f0-1c05ec044b13" name="Spanned_WinZip_Unzip_wi13691" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="44435d85-22a7-8b04-3b60-c4bbdd45816a" name="Spanned_Create" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b96ae1bf-b958-24b4-74d1-89469fe4705f" name="Spanned_InvalidSegmentSize" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ad2ebbb6-9fe5-104a-cd89-620530e8bc87" name="Spanned_WinZip_Zip_wi13691" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="bd0158ba-d603-e7e5-27f3-74c827f65fec" name="Spanned_Resave_wi13915" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="Streams" id="f5461efa-df4a-4aad-b116-655d927f477a" parentListId="e5a6877b-215b-479d-9219-4715b78b761f">
<TestLinks>
<TestLink id="c7c7b98f-bca9-4960-6d2d-7653ded686f6" name="ZOS_over65534_EncryptPkZip_CompressDefault_Z64AsNecessary" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="db64f88e-fb54-8be2-07c4-bd5afa8bb793" name="Streams_7z_Zip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0a06eed6-7f88-6f62-01ac-27955cab598f" name="ZIS_Crypto_mixed_subdir_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="34812f6d-9e19-8ab7-bafb-5d49cd10017f" name="ZOS_Create" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fe0fadfc-b3d5-a083-1cbe-83738b489f7b" name="ZIS_Crypto_zero_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="81e0ae40-b844-7859-1e3b-51b27871f979" name="ZOS_Create_ZeroLength_wi8933_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a7043ad0-98cb-e99f-a1e0-79a82b147a55" name="Streams_7z_Zip_Mixed" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2d6b92c5-9808-bae5-cebb-02eb1acb4201" name="ZOS_over65534_EncryptNo_CompressDefault_Z64AsNecessary" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="363ce94e-aadc-d847-7bef-a75101926fa7" name="ZOS_Create_EmptyEntries" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="7404636f-9d96-8817-c215-c97651ac13e0" name="WriteDelegate" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e4b325b1-b666-93fa-23ad-91158153d334" name="Streams_7z_Zip_ZeroLength" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c6b5ca30-c57b-7475-d760-5ef142a491c8" name="WriteDelegate_ZeroBytes_wi8931" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="566af29c-049a-a824-5630-bdb80a804d49" name="ZIS_Crypto_mixed" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a9d4bf1a-b5cf-844c-c553-591f8fde5f77" name="ZIS_ZOS_VaryCompression" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1c7ded08-1f9f-2a66-eada-c3a5adb07971" name="ZOS_Create_ZeroLength_wi8933" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dec43690-aea1-5b7f-4f4b-f2cbf19d3ec3" name="ZIS_Crypto_mixed_subdir" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5267b46d-46f4-b46e-bb1a-05b5e1b650b6" name="ZOS_Create_Directories" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="d31ac5af-42dd-96d5-0f5e-6d70a6c842c7" name="ZOS_Create_Directories_Write" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="0d8ff098-0bf4-fc60-51f4-c172cd12a4a9" name="ZIS_Crypto_nonzero" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="74d28a1c-a4ca-a9a7-2f89-2fa41b0d36ef" name="ZIS_Crypto_nonzero_subdir" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="746b0c34-8a26-96fb-0d41-37b9caffe3be" name="ZipOutputStream_Parallel" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f0540293-a2c8-f4a6-486c-c11f17b2d6c3" name="ZOS_Create_ZeroByteEntry_wi12964" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f510e9d0-4a26-de42-4fae-4167cc5b75a8" name="ZIS_Crypto_nonzero_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c8b9063a-2111-fa08-166b-a9a635198bc9" name="ZipFile_JitStream_CloserTwice_wi10489" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="72515bf5-68c2-f9fb-5d17-b926392d4e7c" name="ZOS_Create_WithComment_wi10339" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fb136f21-1551-ec28-1c7a-eba964ca3052" name="ZOS_Create_ZeroBytes_Encrypt_NonSeekable" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="420325ee-1c42-c465-4e51-21aca52640b8" name="ZOS_over65534_EncryptWinZip_CompressDefault_Z64AsNecessary" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fde6be23-068b-42d9-c15b-836a26cc6d67" name="WriteDelegate_NonSeekable" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="bf16b7da-4abb-31ab-b857-62583b3a9e24" name="Unicode_Create_ZOS_wi12634" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="e9765bad-7058-771e-619d-e263d1580d08" name="ZIS_Crypto_zero_subdir_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c48aad5c-9f6a-a0a8-6399-b8484f9a057d" name="ZOS_over65534_FAIL" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="62554526-0937-ede5-8c72-add0de970b02" name="ZOS_Create_NullBuffer_wi12964" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="11903e7c-f08e-7271-6a4b-9b68de2deee1" name="ZOS_Create_NonSeekable" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4a5d1e7c-ef9a-3237-8c97-149e862162d2" name="ZIS_Crypto_nonzero_subdir_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="378da2f0-f964-a87b-08a8-0ad77426df6c" name="ZOS_Create_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="691e0e66-6175-1634-ba45-3b6fb064c3e3" name="ZOS_Create_DuplicateEntry" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c470b5e3-1ef7-8a3c-bf76-0da4a6033437" name="ZIS_Crypto_zero_subdir" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="2b1dd99b-7ecb-ad2f-8d22-4abddf5c40d3" name="ZIS_Crypto_mixed_file" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b490db06-7516-c198-6ff5-662d0fd792a0" name="ZIS_Crypto_zero" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c9a74f64-a078-0dde-a52d-864fb8e0fd2b" name="ZOS_Create_WriteBeforePutNextEntry" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="310cf3aa-d76a-59f6-dbc4-c771f62bfd97" name="JitStream_Update_wi13899" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a7c6609f-18a4-3cd0-1718-432ed0145fe7" name="AddEntry_JitProvided" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5f616f7f-87ad-7e73-eb5a-eea90db51ead" name="ZOS_Create_Encrypt_wi12815" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9d8e10f1-93f4-b6f7-d7d5-7602600cf3b0" name="ASPNET_GenerateZip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
<TestList name="SevenZip" id="fec985ca-3453-481f-ac4e-9a853f9082e2" parentListId="8f0fa623-4d47-43c4-8b5d-ec7a7140dde1">
<TestLinks>
<TestLink id="d3def815-cd6d-fed5-5edb-26e3e781ad1f" name="SevenZip_Zip_1" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="3b055597-9f0a-0231-28b4-91e1c8dd21a1" name="SevenZip_Unzip_Password_NonSeekableOutput" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6ab828f8-278c-9831-1971-97f205d09eb9" name="SevenZip_Unzip_Password" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="11fdc4a3-5e92-e597-e81c-1b6283301ed8" name="SevenZip_Zip_2" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ac7cec9b-d964-8ca2-25e9-2043c228bae9" name="SevenZip_Unzip" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="3fe452df-949e-8eba-4a44-caa2a45684c5" name="SevenZip_Unzip_SFX" storage="zip tests\bin\debug\ionic.zip.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
</TestLists>
+10
View File
@@ -0,0 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
}
Binary file not shown.
@@ -0,0 +1,184 @@
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<%
' -------------------------------------------------------
' ASP DotNetZip Example
' -------------------------------------------------------
' This example ASP page uses DotNetZip (Ionic.Zip.dll) via COM
' interop. The page opens a zip file, then allows the user
' to download any individual file within the zip file.
'
'' To get this to work, you must be sure to register DotNetZip for COM
'' interop (regasm). Also you need to be sure that IIS/ASP has the correct
'' permissions to instantiate the ZipFile object. In my experience I Was
'' able to do this by copying Ionic.Zip.dll to the
'' c:\windows\system32\inetsrv directory, then calling "regasm /codebbase
'' Ionic.Zip.dll" from within that directory.
'' This example assumes that the ASP page is deployed into a directory,
'' that contains a subdirectory called "fodder". Fodder must be readable,
'' and should contain one or more zip files. This page allows the user to
'' select a zip file, then select a file within the zip file, and download
'' that file.
''
''
If Request.Form("Submit") = "Download" Then
dim pathForZipFile, fileToDownload
pathForZipFile= Request.Form("zipFile")
if pathForZipFile <> "" Then
fileToDownload = Request.Form("fileToDownload")
Response.Clear
Response.AddHeader "Content-Disposition", "attachment; filename=" & fileToDownload
Response.ContentType = "application/octet-stream"
pathForZipFile = Server.MapPath("fodder\" & pathForZipFile)
dim zip, ms
set zip = Server.CreateObject("Ionic.Zip.ZipFile")
zip.Initialize(pathForZipFile)
set ms = Server.CreateObject("System.IO.MemoryStream")
dim selectedEntry, entry
For Each entry in zip
If entry.FileName = fileToDownload Then
set selectedEntry = entry
End If
Next
selectedEntry.Extract_3(ms)
zip.Dispose
dim fred
fred = ms.ToArray
Response.BinaryWrite(fred)
ms.Dispose
End If
Else
%>
<html>
<HEAD>
<TITLE>Simple DotNetZip Example</TITLE>
<style>
BODY { font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 10pt;}
TD { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 8pt;}
TH { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt;}
H2 { font-size: 16pt; font-weight: bold; font-family: Verdana, Arial, Helvetica, sans-serif; color:Navy;}
H1 { font-size: 20pt; font-weight: bold; font-family: Verdana, Arial, Helvetica, sans-serif; color:Blue;}
</style>
<script language="Javascript">
function Download(file, zipFile)
{
document.form1.fileToDownload.value = file;
document.form1.zipFile.value = zipFile;
document.form1.submit();
}
</script>
<script RUNAT=Server language="VBScript">
'-------------------------------------
' This reads the given zip file.
'-------------------------------------
Sub DisplayContentsOfZip
dim pathForZipFile
pathForZipFile= Request.Form("selectedZip")
if pathForZipFile <> "" Then
pathForZipFile = Server.MapPath("fodder\" & pathForZipFile)
dim zip
set zip = Server.CreateObject("Ionic.Zip.ZipFile")
zip.Initialize(pathForZipFile)
response.write "<table border=1><tr><th>Name</th><th>last modified</th></tr>"
dim entry, fN
For Each entry in zip
If Right(entry.FileName,1) <> "/" Then
Response.Write "<tr><TD><input type='submit' name='Submit' value='Download' onClick=" & chr(34) & "Download('" & _
entry.FileName & "', '" & Request.Form("selectedZip") & "');" & chr(34) & " ></TD><td>" & _
entry.FileName & "</td><td>" & entry.LastModified & "</td></tr>"
End If
Next
response.write "</table>"
zip.Dispose()
End If
End Sub
'-------------------------------------
' This function builds and returns the
' option list for the form. eg:
' <OPTION value="file1.zip">file1.zip</OPTION>
' <OPTION value="file2.zip">file2.zip</OPTION>
' <OPTION value="file3.zip">file3.zip</OPTION>
'-------------------------------------
Function FileList()
Dim fso, folder, ext, item, result
result = ""
Set fso= Server.CreateObject("Scripting.FileSystemObject")
Set folder = FSO.GetFolder(Server.MapPath("fodder"))
For Each item In folder.Files
ext = Right(item.Name,4)
If (ext = ".zip") Then
result = result & "<OPTION value='" & item.Name & "'>" & item.Name & "</OPTION>"
End If
Next
Set fso = Nothing
Set folder = Nothing
FileList = result
End Function
</script>
</HEAD>
<body>
<h1>ASP DotNetZip</h1>
<p> This page shows how to use <a
href="http://DotNetZip.codeplex.com">DotNetZip</a> from an ASP (Classic)
page. This page reads zip files and allows the browser to download
items from the zip files. </p>
<form METHOD="POST" id='form1' name='form1'>
<TABLE style="border:1; cellspacing:1; cellpadding:1;">
<TR> <TD>Select a Zip file:</TD>
<TD><SELECT id='select1' name='selectedZip'>
<%= fileList %>
</SELECT>
</TD>
</TR>
<TR> <TD/><TD><input type='submit' name="Submit" Value="Read Zip"/></TD> </TR>
</TABLE>
<input type="hidden" name="fileToDownload" value="">
<input type="hidden" name="zipFile" value="">
<%
DisplayContentsOfZip
%>
</form>
</body>
</html>
<%
End If
%>
@@ -0,0 +1,249 @@
<%@ Page
Language="C#"
Debug="true"
%>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="Ionic.Zip" %>
<%@ Import Namespace="System.Collections.Generic" %>
<script language="C#" runat="server">
// ZipExample.aspx
//
// This .aspx page demonstrates how to use the DotNetZip library from within ASP.NET.
//
// To run it,
// 1. drop the Ionic.Zip.dll into the \bin directory of yoru asp.net app
// 2. create a subdirectory called "fodder" in your web app directory.
// 3. copy into that directory a variety of random files.
// 4. insure your web.config is properly set up (See below)
//
//
// notes:
// This requies the .NET Framework 3.5 - because it uses the ListView control that is
// new for ASP.NET in the .NET Framework v3.5.
//
// To use this control, you must add the new web controls. Also, you must use the v3.5 compiler.
// Here's an example web.config that works with this aspx file:
//
// <configuration>
// <system.web>
// <trust level="Medium" />
// <compilation defaultLanguage="c#" />
// <pages>
// <controls>
// <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
// </controls>
// </pages>
// </system.web>
// <system.codedom>
// <compilers>
// <compiler language="c#;cs;csharp"
// extension=".cs"
// warningLevel="4"
// type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
// <providerOption name="CompilerVersion" value="v3.5" />
// <providerOption name="WarnAsError" value="false" />
// </compiler>
//
// <compiler language="vb;vbs;visualbasic;vbscript"
// extension=".vb"
// warningLevel="4"
// type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
// <providerOption name="CompilerVersion" value="v3.5" />
// <providerOption name="OptionInfer" value="false" />
// <providerOption name="WarnAsError" value="false" />
// </compiler>
//
// </system.codedom>
// </configuration>
//
//
public String width = "100%";
public void Page_Load (Object sender, EventArgs e)
{
try
{
if ( !Page.IsPostBack ) {
// populate the dropdownlist
// must have a directory called "fodder" in the web app directory
String sMappedPath= Server.MapPath("fodder");
var fqFilenames= new List<String>(System.IO.Directory.GetFiles(sMappedPath));
var filenames= fqFilenames.ConvertAll((s) => { return s.Replace(sMappedPath+"\\", ""); });
ErrorMessage.InnerHtml = "";
FileListView.DataSource = filenames;
FileListView.DataBind();
}
}
catch (Exception)
{
// Ignored
}
}
public void btnGo_Click (Object sender, EventArgs e)
{
ErrorMessage.InnerHtml =""; // debugging only
var filesToInclude= new System.Collections.Generic.List<String>();
String sMappedPath= Server.MapPath("fodder");
var source= FileListView.DataKeys as DataKeyArray ;
foreach (var item in FileListView.Items)
{
CheckBox chkbox= item.FindControl("include") as CheckBox ;
Label lbl= item.FindControl("label") as Label ;
if (chkbox!=null && lbl != null)
{
if (chkbox.Checked)
{
ErrorMessage.InnerHtml += String.Format("adding file: {0}<br/>\n", lbl.Text);
filesToInclude.Add(System.IO.Path.Combine(sMappedPath,lbl.Text));
}
}
}
if (filesToInclude.Count==0)
{
ErrorMessage.InnerHtml += "You did not select any files?<br/>\n";
}
else
{
Response.Clear();
Response.BufferOutput= false;
System.Web.HttpContext c= System.Web.HttpContext.Current;
String ReadmeText= String.Format("README.TXT\n\nHello!\n\n" +
"This is a zip file that was dynamically generated at {0}\n" +
"by an ASP.NET Page running on the machine named '{1}'.\n" +
"The server type is: {2}\n"+
"The password used: '{3}'\n" +
"Encryption: {4}\n",
System.DateTime.Now.ToString("G"),
System.Environment.MachineName,
c.Request.ServerVariables["SERVER_SOFTWARE"],
tbPassword.Text,
(chkUseAes.Checked)?EncryptionAlgorithm.WinZipAes256.ToString() : "None"
);
string archiveName= String.Format("archive-{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "inline; filename=\"" + archiveName + "\"");
// In some cases, saving a zip directly to Response.OutputStream can
// present problems for the unzipper, especially on Macintosh.
// To workaround that, you can save to a file, then copy the file,
// via a FileStream, to the Response.OutputStream.
string tempfile = "c:\\temp\\" + archiveName;
using (ZipFile zip = new ZipFile())
{
// the Readme.txt file will not be password-protected.
zip.AddEntry("Readme.txt", ReadmeText, Encoding.Default);
if (!String.IsNullOrEmpty(tbPassword.Text))
{
zip.Password = tbPassword.Text;
if (chkUseAes.Checked)
zip.Encryption = EncryptionAlgorithm.WinZipAes256;
}
// filesToInclude is a string[] or List<String>
zip.AddFiles(filesToInclude, "files");
zip.Save(tempfile);
}
using (var fs = System.IO.File.OpenRead(tempfile))
{
var b = new byte[1024];
int n;
while ((n = fs.Read(b,0,b.Length)) > 0)
Response.OutputStream.Write(b,0,n);
}
Response.Close();
System.IO.File.Delete(tempfile);
}
}
</script>
<html>
<head>
<link rel="stylesheet" href="style/basic.css">
</head>
<body>
<form id="Form" runat="server">
<h3> <span id="Title" runat="server" />Zip Files from ASP.NET </h3>
<p>This page uses the .NET Zip library (see <a
href="http:///DotNetZip.codeplex.com">http://DotNetZip.codeplex.com</a>)
to dynamically create a zip archive, and then download it to the
browser through Response.OutputStream, via a FileStream. This page is implemented in C#.</p>
<p>In some cases, saving a zip directly to Response.OutputStream can
present problems for the unzipper, especially on Macintosh.
To workaround that, you can save to a file, then copy the contents of the file, via a FileStream, to
the Response.OutputStream.
</p>
<span class="SampleTitle"><b>Check the boxes to select the files, set a password if you like,
then click the button to zip them up.</b></span>
<br/>
<br/>
Password: <asp:TextBox id="tbPassword" Password='true' Text="" AutoPostBack runat="server"/>
<span style="color:Red">(Optional)</span>
<br/>
<br/>
Use AES?: <asp:CheckBox id="chkUseAes" AutoPostBack runat="server"/>
<br/>
<br/>
<asp:Button id="btnGo" Text="Zip checked files" AutoPostBack OnClick="btnGo_Click" runat="server"/>
<br/>
<br/>
<span style="color:red" id="ErrorMessage" runat="server"/>
<br/>
<asp:ListView ID="FileListView" runat="server">
<LayoutTemplate>
<table>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:Checkbox ID="include" runat="server"/></td>
<td><asp:Label id="label" runat="server" Text="<%# Container.DataItem %>" /></td>
</tr>
</ItemTemplate>
<EmptyDataTemplate>
<div>Nothing to see here...</div>
</EmptyDataTemplate>
</asp:ListView>
</form>
</body>
</html>
@@ -0,0 +1,243 @@
<%@ Page
Language="C#"
Debug="true"
%>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="Ionic.Zip" %>
<%@ Import Namespace="System.Collections.Generic" %>
<script language="C#" runat="server">
// ZipExample.aspx
//
// This .aspx page demonstrates how to use the DotNetZip library from within ASP.NET.
//
// To run it,
// 1. drop the Ionic.Zip.dll into the \bin directory of yoru asp.net app
// 2. create a subdirectory called "fodder" in your web app directory.
// 3. copy into that directory a variety of random files.
// 4. insure your web.config is properly set up (See below)
//
//
// notes:
// This requies the .NET Framework 3.5 - because it uses the ListView control that is
// new for ASP.NET in the .NET Framework v3.5.
//
// To use this control, you must add the new web controls. Also, you must use the v3.5 compiler.
// Here's an example web.config that works with this aspx file:
//
// <configuration>
// <system.web>
// <trust level="Medium" />
// <compilation defaultLanguage="c#" />
// <pages>
// <controls>
// <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
// </controls>
// </pages>
// </system.web>
// <system.codedom>
// <compilers>
// <compiler language="c#;cs;csharp"
// extension=".cs"
// warningLevel="4"
// type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
// <providerOption name="CompilerVersion" value="v3.5" />
// <providerOption name="WarnAsError" value="false" />
// </compiler>
//
// <compiler language="vb;vbs;visualbasic;vbscript"
// extension=".vb"
// warningLevel="4"
// type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
// <providerOption name="CompilerVersion" value="v3.5" />
// <providerOption name="OptionInfer" value="false" />
// <providerOption name="WarnAsError" value="false" />
// </compiler>
//
// </system.codedom>
// </configuration>
//
//
public String width = "100%";
public void Page_Load (Object sender, EventArgs e)
{
try
{
if ( !Page.IsPostBack ) {
// populate the dropdownlist
// must have a directory called "fodder" in the web app directory
String sMappedPath= Server.MapPath("fodder");
var fqFilenames= new List<String>(System.IO.Directory.GetFiles(sMappedPath));
var filenames= fqFilenames.ConvertAll((s) => { return s.Replace(sMappedPath+"\\", ""); });
ErrorMessage.InnerHtml = "";
FileListView.DataSource = filenames;
FileListView.DataBind();
}
}
catch (Exception)
{
// Ignored
}
}
public void btnGo_Click (Object sender, EventArgs e)
{
ErrorMessage.InnerHtml =""; // debugging only
var filesToInclude= new System.Collections.Generic.List<String>();
String sMappedPath= Server.MapPath("fodder");
var source= FileListView.DataKeys as DataKeyArray ;
foreach (var item in FileListView.Items)
{
CheckBox chkbox= item.FindControl("include") as CheckBox ;
Label lbl= item.FindControl("label") as Label ;
if (chkbox!=null && lbl != null)
{
if (chkbox.Checked)
{
ErrorMessage.InnerHtml += String.Format("adding file: {0}<br/>\n", lbl.Text);
filesToInclude.Add(System.IO.Path.Combine(sMappedPath,lbl.Text));
}
}
}
if (filesToInclude.Count==0)
{
ErrorMessage.InnerHtml += "You did not select any files?<br/>\n";
}
else
{
Response.Clear();
Response.BufferOutput= false;
System.Web.HttpContext c= System.Web.HttpContext.Current;
String ReadmeText= String.Format("README.TXT\n\nHello!\n\n" +
"This is a zip file that was dynamically generated at {0}\n" +
"by an ASP.NET Page running on the machine named '{1}'.\n" +
"The server type is: {2}\n"+
"The password used: '{3}'\n" +
"Encryption: {4}\n",
System.DateTime.Now.ToString("G"),
System.Environment.MachineName,
c.Request.ServerVariables["SERVER_SOFTWARE"],
tbPassword.Text,
(chkUseAes.Checked)?EncryptionAlgorithm.WinZipAes256.ToString() : "None"
);
string archiveName= String.Format("archive-{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "inline; filename=\"" + archiveName + "\"");
// In some cases, saving a zip directly to Response.OutputStream can
// present problems for the unzipper, especially on Macintosh.
// To workaround that, you can save to a MemoryStream, then copy to
// the Response.OutputStream.
using (var ms = new System.IO.MemoryStream())
{
using (ZipFile zip = new ZipFile())
{
// the Readme.txt file will not be password-protected.
zip.AddEntry("Readme.txt", ReadmeText, Encoding.Default);
if (!String.IsNullOrEmpty(tbPassword.Text))
{
zip.Password = tbPassword.Text;
if (chkUseAes.Checked)
zip.Encryption = EncryptionAlgorithm.WinZipAes256;
}
// filesToInclude is a string[] or List<String>
zip.AddFiles(filesToInclude, "files");
zip.Save(ms);
}
// copy the memory stream to the Response.OutputStream
ms.Position = 0;
var b = new byte[1024];
int n;
while ((n = ms.Read(b,0,b.Length)) > 0)
Response.OutputStream.Write(b,0,n);
}
Response.Close();
}
}
</script>
<html>
<head>
<link rel="stylesheet" href="style/basic.css">
</head>
<body>
<form id="Form" runat="server">
<h3> <span id="Title" runat="server" />Zip Files from ASP.NET </h3>
<p>This page uses the .NET Zip library (see <a
href="http:///DotNetZip.codeplex.com">http://DotNetZip.codeplex.com</a>)
to dynamically create a zip archive, and then download it to the
browser through Response.OutputStream, via a MemoryStream. This page is implemented in C#.</p>
<span class="SampleTitle"><b>Check the boxes to select the files, set a password if you like,
then click the button to zip them up.</b></span>
<br/>
<br/>
Password: <asp:TextBox id="tbPassword" Password='true' Text="" AutoPostBack runat="server"/>
<span style="color:Red">(Optional)</span>
<br/>
<br/>
Use AES?: <asp:CheckBox id="chkUseAes" AutoPostBack runat="server"/>
<br/>
<br/>
<asp:Button id="btnGo" Text="Zip checked files" AutoPostBack OnClick="btnGo_Click" runat="server"/>
<br/>
<br/>
<span style="color:red" id="ErrorMessage" runat="server"/>
<br/>
<asp:ListView ID="FileListView" runat="server">
<LayoutTemplate>
<table>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:Checkbox ID="include" runat="server"/></td>
<td><asp:Label id="label" runat="server" Text="<%# Container.DataItem %>" /></td>
</tr>
</ItemTemplate>
<EmptyDataTemplate>
<div>Nothing to see here...</div>
</EmptyDataTemplate>
</asp:ListView>
</form>
</body>
</html>
@@ -0,0 +1,230 @@
<%@ Page
Language="C#"
Debug="true"
%>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="Ionic.Zip" %>
<%@ Import Namespace="System.Collections.Generic" %>
<script language="C#" runat="server">
// ZipExample.aspx
//
// This .aspx page demonstrates how to use the DotNetZip library from within ASP.NET.
//
// To run it,
// 1. drop the Ionic.Zip.dll into the \bin directory of yoru asp.net app
// 2. create a subdirectory called "fodder" in your web app directory.
// 3. copy into that directory a variety of random files.
// 4. insure your web.config is properly set up (See below)
//
//
// notes:
// This requies the .NET Framework 3.5 - because it uses the ListView control that is
// new for ASP.NET in the .NET Framework v3.5.
//
// To use this control, you must add the new web controls. Also, you must use the v3.5 compiler.
// Here's an example web.config that works with this aspx file:
//
// <configuration>
// <system.web>
// <trust level="Medium" />
// <compilation defaultLanguage="c#" />
// <pages>
// <controls>
// <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
// </controls>
// </pages>
// </system.web>
// <system.codedom>
// <compilers>
// <compiler language="c#;cs;csharp"
// extension=".cs"
// warningLevel="4"
// type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
// <providerOption name="CompilerVersion" value="v3.5" />
// <providerOption name="WarnAsError" value="false" />
// </compiler>
//
// <compiler language="vb;vbs;visualbasic;vbscript"
// extension=".vb"
// warningLevel="4"
// type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
// <providerOption name="CompilerVersion" value="v3.5" />
// <providerOption name="OptionInfer" value="false" />
// <providerOption name="WarnAsError" value="false" />
// </compiler>
// </compilers>
// </system.codedom>
// </configuration>
//
//
public String width = "100%";
public void Page_Load (Object sender, EventArgs e)
{
try
{
if ( !Page.IsPostBack ) {
// populate the dropdownlist
// must have a directory called "fodder" in the web app directory
String sMappedPath= Server.MapPath("fodder");
var fqFilenames= new List<String>(System.IO.Directory.GetFiles(sMappedPath));
var filenames= fqFilenames.ConvertAll((s) => { return s.Replace(sMappedPath+"\\", ""); });
ErrorMessage.InnerHtml = "";
FileListView.DataSource = filenames;
FileListView.DataBind();
}
}
catch (Exception)
{
// Ignored
}
}
public void btnGo_Click (Object sender, EventArgs e)
{
ErrorMessage.InnerHtml =""; // debugging only
var filesToInclude= new System.Collections.Generic.List<String>();
String sMappedPath= Server.MapPath("fodder");
var source= FileListView.DataKeys as DataKeyArray ;
foreach (var item in FileListView.Items)
{
CheckBox chkbox= item.FindControl("include") as CheckBox ;
Label lbl= item.FindControl("label") as Label ;
if (chkbox!=null && lbl != null)
{
if (chkbox.Checked)
{
ErrorMessage.InnerHtml += String.Format("adding file: {0}<br/>\n", lbl.Text);
filesToInclude.Add(System.IO.Path.Combine(sMappedPath,lbl.Text));
}
}
}
if (filesToInclude.Count==0)
{
ErrorMessage.InnerHtml += "You did not select any files?<br/>\n";
}
else
{
Response.Clear();
Response.BufferOutput= false;
System.Web.HttpContext c= System.Web.HttpContext.Current;
String ReadmeText= String.Format("README.TXT\n\nHello!\n\n" +
"This is a zip file that was dynamically generated at {0}\n" +
"by an ASP.NET Page running on the machine named '{1}'.\n" +
"The server type is: {2}\n"+
"The password used: '{3}'\n" +
"Encryption: {4}\n",
System.DateTime.Now.ToString("G"),
System.Environment.MachineName,
c.Request.ServerVariables["SERVER_SOFTWARE"],
tbPassword.Text,
(chkUseAes.Checked)?EncryptionAlgorithm.WinZipAes256.ToString() : "None"
);
string archiveName= String.Format("archive-{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "inline; filename=\"" + archiveName + "\"");
using (ZipFile zip = new ZipFile())
{
// the Readme.txt file will not be password-protected.
zip.AddEntry("Readme.txt", ReadmeText, Encoding.Default);
if (!String.IsNullOrEmpty(tbPassword.Text))
{
zip.Password = tbPassword.Text;
if (chkUseAes.Checked)
zip.Encryption = EncryptionAlgorithm.WinZipAes256;
}
// filesToInclude is a string[] or List<String>
zip.AddFiles(filesToInclude, "files");
zip.Save(Response.OutputStream);
}
Response.Close();
}
}
</script>
<html>
<head>
<link rel="stylesheet" href="style/basic.css">
</head>
<body>
<form id="Form" runat="server">
<h3> <span id="Title" runat="server" />Zip Files from ASP.NET </h3>
<p>This page uses the .NET Zip library (see <a
href="http:///DotNetZip.codeplex.com">http://DotNetZip.codeplex.com</a>)
to dynamically create a zip archive, and then download it to the
browser through Response.OutputStream. This page is implemented in C#.</p>
<span class="SampleTitle"><b>Check the boxes to select the files, set a password if you like,
then click the button to zip them up.</b></span>
<br/>
<br/>
Password: <asp:TextBox id="tbPassword" Password='true' Text="" AutoPostBack runat="server"/>
<span style="color:Red">(Optional)</span>
<br/>
<br/>
Use AES?: <asp:CheckBox id="chkUseAes" AutoPostBack runat="server"/>
<br/>
<br/>
<asp:Button id="btnGo" Text="Zip checked files" AutoPostBack OnClick="btnGo_Click" runat="server"/>
<br/>
<br/>
<span style="color:red" id="ErrorMessage" runat="server"/>
<br/>
<asp:ListView ID="FileListView" runat="server">
<LayoutTemplate>
<table>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:Checkbox ID="include" runat="server"/></td>
<td><asp:Label id="label" runat="server" Text="<%# Container.DataItem %>" /></td>
</tr>
</ItemTemplate>
<EmptyDataTemplate>
<div>Nothing to see here...</div>
</EmptyDataTemplate>
</asp:ListView>
</form>
</body>
</html>
@@ -0,0 +1,255 @@
<%@ Page
Language="VB"
Debug="true"
%>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="Ionic.Zip" %>
<%@ Import Namespace="System.Collections.Generic" %>
<script language="VB" runat="server">
' ZipExample.aspx
'
' This .aspx page demonstrates how to use the DotNetZip library from within ASP.NET.
'
' To run it,
' 1. drop the Ionic.Zip.dll into the \bin directory of your asp.net app
' 2. create a subdirectory called "fodder" in your web app directory.
' 3. copy into that directory a variety of random files.
' 4. insure your web.config is properly set up (See below)
'
'
' notes:
' This requies the .NET Framework 3.5 - because it uses the ListView control that is
' new for ASP.NET in the .NET Framework v3.5.
'
' To use this control, you must add the new web controls. Also, you must use the v3.5 compiler.
' Here's an example web.config that works with this aspx file:
'
' <configuration>
' <system.web>
' <trust level="Medium" />
' <compilation defaultLanguage="c#" />
' <pages>
' <controls>
' <add tagPrefix="asp" namespace="System.Web.UI.WebControls"
' assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
' </controls>
' </pages>
' </system.web>
' <system.codedom>
' <compilers>
' <compiler language="c#;cs;csharp"
' extension=".cs"
' warningLevel="4"
' type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
' <providerOption name="CompilerVersion" value="v3.5" />
' <providerOption name="WarnAsError" value="false" />
' </compiler>
'
' <compiler language="vb;vbs;visualbasic;vbscript"
' extension=".vb"
' warningLevel="4"
' type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
' <providerOption name="CompilerVersion" value="v3.5" />
' <providerOption name="OptionInfer" value="false" />
' <providerOption name="WarnAsError" value="false" />
' </compiler>
'
' </system.codedom>
' </configuration>
'
'
Dim width as String = "100%"
Public Sub Page_Load (ByVal sender As Object, ByVal e As System.EventArgs)
Try
If Not ( Page.IsPostBack ) Then
' populate the dropdownlist
' must have a directory called "fodder" in the web app
Dim sMappedPath as String= Server.MapPath("fodder")
Dim fqFilenames As New List(Of String)(System.IO.Directory.GetFiles(sMappedPath))
Dim filenames as List(Of String) = _
fqFilenames.ConvertAll (Function(s) s.Replace(sMappedPath & "\", ""))
ErrorMessage.InnerHtml = ""
FileListView.DataSource = filenames
FileListView.DataBind()
End If
Catch
' Ignored
End Try
End Sub
Public Sub btnGo_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)
ErrorMessage.InnerHtml ="" ' debugging only
Dim filesToInclude as New System.Collections.Generic.List(Of String)()
Dim sMappedPath as String= Server.MapPath("fodder")
Dim source As DataKeyArray= FileListView.DataKeys
For Each item As ListViewDataItem in FileListView.Items
Dim chkbox As CheckBox= CType(item.FindControl("include"), CheckBox)
Dim lbl As Label = CType(item.FindControl("label"), Label)
If Not (chkbox Is Nothing OR lbl Is Nothing) Then
If (chkbox.Checked) Then
ErrorMessage.InnerHtml = ErrorMessage.InnerHtml & _
String.Format("adding file: {0}<br/>\n", lbl.Text)
filesToInclude.Add(System.IO.Path.Combine(sMappedPath,lbl.Text))
End If
End If
Next
If (filesToInclude.Count=0) Then
ErrorMessage.InnerHtml = ErrorMessage.InnerHtml & "You did not select any files?<br/>\n"
Else
Response.Clear
Response.BufferOutput= false
Dim enc as Ionic.Zip.EncryptionAlgorithm = Ionic.Zip.EncryptionAlgorithm.None
If (chkUseAes.Checked) Then
enc = EncryptionAlgorithm.WinZipAes256
End If
Dim c As System.Web.HttpContext = System.Web.HttpContext.Current
Dim ReadmeText As String= String.Format("README.TXT\n\nHello!\n\n" & _
"This is a zip file that was dynamically generated at {0}\n" & _
"by an ASP.NET Page running on the machine named '{1}'.\n" & _
"The server type is: {2}\n" & _
"The password used: '{3}'\n" & _
"Encryption: {4}\n", _
System.DateTime.Now.ToString("G"), _
System.Environment.MachineName, _
c.Request.ServerVariables("SERVER_SOFTWARE"), _
tbPassword.Text, _
enc.ToString )
Dim archiveName as String= String.Format("archive-{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"))
Response.ContentType = "application/zip"
Response.AddHeader("Content-Disposition", "inline; filename=" & chr(34) & archiveName & chr(34))
' In some cases, saving a zip directly to Response.OutputStream can
' present problems for the unzipper, especially on Macintosh.
' To workaround that, you can save to a file, then copy the file,
' via a FileStream, to the Response.OutputStream.
Dim tempfile As String = "c:\temp\" & archiveName
Using zip as new ZipFile()
' the Readme.txt file will not be password-protected.
zip.AddEntry("Readme.txt", ReadmeText, Encoding.Default)
If Not String.IsNullOrEmpty(tbPassword.Text) Then
zip.Password = tbPassword.Text
zip.Encryption = enc
End If
' filesToInclude is a string[] or List<String>
zip.AddFiles(filesToInclude, "files")
' save the zip to a filesystem file
zip.Save(tempfile)
End Using
' open and read the file, and copy it to Response.OutputStream
Using fs as System.IO.FileStream = System.IO.File.OpenRead("c:\temp\" & archiveName)
dim b(1024) as Byte
dim n as New Int32
n=-1
While (n <> 0)
n = fs.Read(b,0,b.Length)
If (n <> 0)
Response.OutputStream.Write(b,0,n)
End If
End While
End Using
Response.Close
System.IO.File.Delete(tempfile)
End If
End Sub
</script>
<html>
<head>
<link rel="stylesheet" href="style/basic.css">
</head>
<body>
<form id="Form" runat="server">
<h3> <span id="Title" runat="server" />Zip Files from ASP.NET </h3>
<p>This page uses the .NET Zip library (see <a
href="http://DotNetZip.codeplex.com">http://DotNetZip.codeplex.com/</a>)
to dynamically create a zip archive, and then download it to the
browser through Response.OutputStream, via a FileStream. This page is implemented
in VB.NET.</p>
<p>In some cases, saving a zip directly to Response.OutputStream can
present problems for the unzipper, especially on Macintosh.
To workaround that, you can save to a file, then copy the contents of
the file, via a FileStream, to the Response.OutputStream.
</p>
<span class="SampleTitle"><b>Check the boxes to select the files, set a password if you like,
then click the button to zip them up.</b></span>
<br/>
<br/>
Password: <asp:TextBox id="tbPassword" Password='true' Text="" AutoPostBack runat="server"/>
<span style="color:Red">(Optional)</span>
<br/>
<br/>
Use AES?: <asp:CheckBox id="chkUseAes" AutoPostBack runat="server"/>
<br/>
<br/>
<asp:Button id="btnGo" Text="Zip checked files" AutoPostBack OnClick="btnGo_Click" runat="server"/>
<br/>
<br/>
<span style="color:red" id="ErrorMessage" runat="server"/>
<br/>
<asp:ListView ID="FileListView" runat="server">
<LayoutTemplate>
<table>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:Checkbox ID="include" runat="server"/></td>
<td><asp:Label id="label" runat="server" Text="<%# Container.DataItem %>" /></td>
</tr>
</ItemTemplate>
<EmptyDataTemplate>
<div>Nothing to see here...</div>
</EmptyDataTemplate>
</asp:ListView>
</form>
</body>
</html>
@@ -0,0 +1,229 @@
<%@ Page
Language="VB"
Debug="true"
%>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="Ionic.Zip" %>
<%@ Import Namespace="System.Collections.Generic" %>
<script language="VB" runat="server">
' ZipExample.aspx
'
' This .aspx page demonstrates how to use the DotNetZip library from within ASP.NET.
'
' To run it,
' 1. drop the Ionic.Zip.dll into the \bin directory of your asp.net app
' 2. create a subdirectory called "fodder" in your web app directory.
' 3. copy into that directory a variety of random files.
' 4. insure your web.config is properly set up (See below)
'
'
' notes:
' This requies the .NET Framework 3.5 - because it uses the ListView control that is
' new for ASP.NET in the .NET Framework v3.5.
'
' To use this control, you must add the new web controls. Also, you must use the v3.5 compiler.
' Here's an example web.config that works with this aspx file:
'
' <configuration>
' <system.web>
' <trust level="Medium" />
' <compilation defaultLanguage="c#" />
' <pages>
' <controls>
' <add tagPrefix="asp" namespace="System.Web.UI.WebControls"
' assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
' </controls>
' </pages>
' </system.web>
' <system.codedom>
' <compilers>
' <compiler language="c#;cs;csharp"
' extension=".cs"
' warningLevel="4"
' type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
' <providerOption name="CompilerVersion" value="v3.5" />
' <providerOption name="WarnAsError" value="false" />
' </compiler>
'
' <compiler language="vb;vbs;visualbasic;vbscript"
' extension=".vb"
' warningLevel="4"
' type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
' <providerOption name="CompilerVersion" value="v3.5" />
' <providerOption name="OptionInfer" value="false" />
' <providerOption name="WarnAsError" value="false" />
' </compiler>
'
' </system.codedom>
' </configuration>
'
'
Dim width as String = "100%"
Public Sub Page_Load (ByVal sender As Object, ByVal e As System.EventArgs)
Try
If Not ( Page.IsPostBack ) Then
' populate the dropdownlist
' must have a directory called "fodder" in the web app
Dim sMappedPath as String= Server.MapPath("fodder")
Dim fqFilenames As New List(Of String)(System.IO.Directory.GetFiles(sMappedPath))
Dim filenames as List(Of String) = _
fqFilenames.ConvertAll (Function(s) s.Replace(sMappedPath & "\", ""))
ErrorMessage.InnerHtml = ""
FileListView.DataSource = filenames
FileListView.DataBind()
End If
Catch
' Ignored
End Try
End Sub
Public Sub btnGo_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)
ErrorMessage.InnerHtml ="" ' debugging only
Dim filesToInclude as New System.Collections.Generic.List(Of String)()
Dim sMappedPath as String= Server.MapPath("fodder")
Dim source As DataKeyArray= FileListView.DataKeys
For Each item As ListViewDataItem in FileListView.Items
Dim chkbox As CheckBox= CType(item.FindControl("include"), CheckBox)
Dim lbl As Label = CType(item.FindControl("label"), Label)
If Not (chkbox Is Nothing OR lbl Is Nothing) Then
If (chkbox.Checked) Then
ErrorMessage.InnerHtml = ErrorMessage.InnerHtml & _
String.Format("adding file: {0}<br/>\n", lbl.Text)
filesToInclude.Add(System.IO.Path.Combine(sMappedPath,lbl.Text))
End If
End If
Next
If (filesToInclude.Count=0) Then
ErrorMessage.InnerHtml = ErrorMessage.InnerHtml & "You did not select any files?<br/>\n"
Else
Response.Clear
Response.BufferOutput= false
Dim enc as Ionic.Zip.EncryptionAlgorithm = Ionic.Zip.EncryptionAlgorithm.None
If (chkUseAes.Checked) Then
enc = EncryptionAlgorithm.WinZipAes256
End If
Dim c As System.Web.HttpContext = System.Web.HttpContext.Current
Dim ReadmeText As String= String.Format("README.TXT\n\nHello!\n\n" & _
"This is a zip file that was dynamically generated at {0}\n" & _
"by an ASP.NET Page running on the machine named '{1}'.\n" & _
"The server type is: {2}\n" & _
"The password used: '{3}'\n" & _
"Encryption: {4}\n", _
System.DateTime.Now.ToString("G"), _
System.Environment.MachineName, _
c.Request.ServerVariables("SERVER_SOFTWARE"), _
tbPassword.Text, _
enc.ToString )
Dim archiveName as String= String.Format("archive-{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"))
Response.ContentType = "application/zip"
Response.AddHeader("Content-Disposition", "inline; filename=" & chr(34) & archiveName & chr(34))
Using zip as new ZipFile()
' the Readme.txt file will not be password-protected.
zip.AddEntry("Readme.txt", "", ReadmeText, Encoding.Default)
If Not String.IsNullOrEmpty(tbPassword.Text) Then
zip.Password = tbPassword.Text
zip.Encryption = enc
End If
' filesToInclude is a string[] or List<String>
zip.AddFiles(filesToInclude, "files")
zip.Save(Response.OutputStream)
End Using
Response.Close
End If
End Sub
</script>
<html>
<head>
<link rel="stylesheet" href="style/basic.css">
</head>
<body>
<form id="Form" runat="server">
<h3> <span id="Title" runat="server" />Zip Files from ASP.NET </h3>
<p>This page uses the .NET Zip library (see <a
href="http://DotNetZip.codeplex.com">http://DotNetZip.codeplex.com/</a>)
to dynamically create a zip archive, and then download it to the
browser through Response.OutputStream. This page is implemented
in VB.NET.</p>
<span class="SampleTitle"><b>Check the boxes to select the files, set a password if you like,
then click the button to zip them up.</b></span>
<br/>
<br/>
Password: <asp:TextBox id="tbPassword" Password='true' Text="" AutoPostBack runat="server"/>
<span style="color:Red">(Optional)</span>
<br/>
<br/>
Use AES?: <asp:CheckBox id="chkUseAes" AutoPostBack runat="server"/>
<br/>
<br/>
<asp:Button id="btnGo" Text="Zip checked files" AutoPostBack OnClick="btnGo_Click" runat="server"/>
<br/>
<br/>
<span style="color:red" id="ErrorMessage" runat="server"/>
<br/>
<asp:ListView ID="FileListView" runat="server">
<LayoutTemplate>
<table>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:Checkbox ID="include" runat="server"/></td>
<td><asp:Label id="label" runat="server" Text="<%# Container.DataItem %>" /></td>
</tr>
</ItemTemplate>
<EmptyDataTemplate>
<div>Nothing to see here...</div>
</EmptyDataTemplate>
</asp:ListView>
</form>
</body>
</html>
@@ -0,0 +1,89 @@
// CreateZip.cs
//
// ----------------------------------------------------------------------
// Copyright (c) 2006, 2007, 2008 Microsoft Corporation. All rights reserved.
//
// This example is released under the Microsoft Permissive License of
// October 2006. See the license.txt file accompanying this release for
// full details.
//
// ----------------------------------------------------------------------
//
// This simplistic utility gets a list of all the files in the specified directory,
// and zips them into a single archive. This utility does not recurse through
// the directory tree.
//
// compile with:
// csc /debug+ /target:exe /R:Ionic.Utils.Zip.dll /out:CreateZip.exe CreateZip.cs
//
//
// Wed, 29 Mar 2006 14:36
//
using System;
using Ionic.Zip;
namespace Ionic.Zip.Examples
{
public class CreateZip
{
private static void Usage()
{
Console.WriteLine("usage:\n CreateZip <ZipFileToCreate> <directory>");
Environment.Exit(1);
}
public static void Main(String[] args)
{
if (args.Length != 2) Usage();
if (!System.IO.Directory.Exists(args[1]))
{
Console.WriteLine("The directory does not exist!\n");
Usage();
}
if (System.IO.File.Exists(args[0]))
{
Console.WriteLine("That zipfile already exists!\n");
Usage();
}
if (!args[0].EndsWith(".zip"))
{
Console.WriteLine("The filename must end with .zip!\n");
Usage();
}
string ZipFileToCreate = args[0];
string DirectoryToZip = args[1];
try
{
using (ZipFile zip = new ZipFile())
{
// note: this does not recurse directories!
String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip);
// This is just a sample, provided to illustrate the DotNetZip interface.
// This logic does not recurse through sub-directories.
// If you are zipping up a directory, you may want to see the AddDirectory() method,
// which operates recursively.
foreach (String filename in filenames)
{
Console.WriteLine("Adding {0}...", filename);
ZipEntry e= zip.AddFile(filename);
e.Comment = "Added by Cheeso's CreateZip utility.";
}
zip.Comment= String.Format("This zip archive was created by the CreateZip example application on machine '{0}'",
System.Net.Dns.GetHostName());
zip.Save(ZipFileToCreate);
}
}
catch (System.Exception ex1)
{
System.Console.Error.WriteLine("exception: " + ex1);
}
}
}
}
@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{FB9FC8D7-7897-4802-9694-F379F25C00CB}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CreateZip</RootNamespace>
<AssemblyName>CreateZip</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CreateZip.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\..\SolutionInfo.cs">
<Link>Properties\SolutionInfo.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Zip\Zip DLL.csproj">
<Project>{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}</Project>
<Name>Zip DLL</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+70
View File
@@ -0,0 +1,70 @@
// ReadZip.cs
//
// ----------------------------------------------------------------------
// Copyright (c) 2006-2009 Microsoft Corporation. All rights reserved.
//
// This example is released under the Microsoft Public License .
// See the license.txt file accompanying this release for
// full details.
//
// ----------------------------------------------------------------------
//
// This simple example utility simply reads a zip archive and extracts
// all elements in it, to the specified target directory.
//
// compile with:
// csc /target:exe /r:Ionic.Zip.dll /out:ReadZip.exe ReadZip.cs
//
// Wed, 29 Mar 2006 14:36
//
using System;
using Ionic.Zip;
namespace Ionic.Zip.Examples
{
public class ReadZip
{
private static void Usage()
{
Console.WriteLine("usage:\n ReadZip2 <zipfile> <unpackdirectory>");
Environment.Exit(1);
}
public static void Main(String[] args)
{
if (args.Length != 2) Usage();
if (!System.IO.File.Exists(args[0]))
{
Console.WriteLine("That zip file does not exist!\n");
Usage();
}
try
{
// Specifying Console.Out here causes diagnostic msgs to be sent to the Console
// In a WinForms or WPF or Web app, you could specify nothing, or an alternate
// TextWriter to capture diagnostic messages.
var options = new ReadOptions { StatusMessageWriter = System.Console.Out };
using (ZipFile zip = ZipFile.Read(args[0], options))
{
// This call to ExtractAll() assumes:
// - none of the entries are password-protected.
// - want to extract all entries to current working directory
// - none of the files in the zip already exist in the directory;
// if they do, the method will throw.
zip.ExtractAll(args[1]);
}
}
catch (System.Exception ex1)
{
System.Console.Error.WriteLine("exception: " + ex1);
}
}
}
}
@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{F4024C01-1133-4A5A-B421-22EA8CA89EA5}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ReadZip</RootNamespace>
<AssemblyName>ReadZip</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ReadZip.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\..\SolutionInfo.cs">
<Link>Properties\SolutionInfo.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Zip\Zip DLL.csproj">
<Project>{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}</Project>
<Name>Zip DLL</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -0,0 +1,226 @@
// QuickZip.cs
// ------------------------------------------------------------------
//
// A simple app that creates a zip file, zipping up a files and
// directories specified on the command line. This application needs to
// be run from the console, in order to specify arguments, but it is
// also a winforms app.
//
// It correctly does the multi-threading to allow smooth UI update.
//
// compile it with:
// c:\.net3.5\csc.exe /t:exe /debug:full /optimize- /R:System.dll /R:Ionic.Zip.dll
// /out:QuickZip.exe QuickZip.cs
//
// last saved:
// Time-stamp: <2010-March-16 14:11:42>
// ------------------------------------------------------------------
//
// Copyright (c) 2010 by Dino Chiesa
// All rights reserved!
//
// Licensed under the Microsoft Public License.
// see http://www.opensource.org/licenses/ms-pl.html
//
// ------------------------------------------------------------------
using System;
//using System.Reflection;
using System.Windows.Forms; // Form, Label, ProgressBar
using Ionic.Zip; // ZipFile, ZipEntry
using System.ComponentModel; // BackgroundWorker
using Interop=System.Runtime.InteropServices; // DllImport
namespace Ionic.Zip.Examples.CS
{
public class QuickZip
{
[Interop.DllImport("kernel32.dll")]
private static extern bool AllocConsole();
[Interop.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
[STAThread]
public static void Main(string[] args)
{
if (args.Length != 2)
{
// open a new window so we can write to it.
QuickZip.AllocConsole();
QuickZip.Usage(args);
return;
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var f = new QuickZipForm(args[0], args[1]);
Application.Run(f);
}
return;
}
private static int Usage(string[] args)
{
Console.WriteLine("QuickUnzip. Usage: QuickZip <zipfile> <selection criteria>");
Console.WriteLine("\n<ENTER> to continue...");
Console.ReadLine();
return 1;
}
}
public class QuickZipForm : Form
{
private QuickZipForm()
{
this.components = null;
this.InitializeComponent();
}
public QuickZipForm(string zipfile, string selectionCriteria) : this()
{
this.zipfileName = zipfile;
this.selectionCriteria = selectionCriteria;
}
protected override void Dispose(Boolean disposing)
{
if (disposing && (this.components != null))
this.components.Dispose();
base.Dispose(disposing);
}
private void FixTitle()
{
this.Text = String.Format("Quick Zip {0}", this.zipfileName);
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.label1 = new Label();
this.progressBar1 = new ProgressBar();
base.SuspendLayout();
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 12);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(50, 13);
this.label1.TabIndex = 2;
this.label1.Text = "Zipping...";
this.progressBar1.Anchor = (AnchorStyles.Right | (AnchorStyles.Left | AnchorStyles.Top));
this.progressBar1.Location = new System.Drawing.Point(12, 36);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(436, 18);
this.progressBar1.Step = 1;
this.progressBar1.TabIndex = 7;
base.AutoScaleDimensions = new System.Drawing.SizeF(6, 13);
base.AutoScaleMode = AutoScaleMode.Font;
base.ClientSize = new System.Drawing.Size(460, 80);
base.Controls.Add(this.label1);
base.Controls.Add(this.progressBar1);
base.Name = "QuickUnzipForm";
this.Text = "QuickUnzip";
this.Load += this.QuickZipForm_Load;
this.Shown += this.QuickZipForm_Shown;
base.ResumeLayout(false);
base.PerformLayout();
}
public void OnTimerEvent(Object source, EventArgs e)
{
base.Close();
}
private void QuickZipForm_Load(Object sender, EventArgs e)
{
this.FixTitle();
}
private void QuickZipForm_Shown(Object sender, EventArgs e)
{
// For info on running long-running tasks in response to button clicks,
// in VB.NET WinForms, see
// http://msdn.microsoft.com/en-us/library/ms951089.aspx
var backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
backgroundWorker1.WorkerSupportsCancellation = false;
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.DoWork += this.Zipit;
backgroundWorker1.RunWorkerAsync();
}
public void SaveProgress(object sender, SaveProgressEventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new Action<Object, SaveProgressEventArgs>(SaveProgress), new Object[] { sender, e });
}
else
{
switch (e.EventType)
{
case ZipProgressEventType.Saving_Started:
//Console.WriteLine("pb max {0}", e.EntriesTotal);
this.progressBar1.Maximum = e.EntriesTotal;
this.progressBar1.Value = 0;
this.progressBar1.Minimum = 0;
this.progressBar1.Step = 1;
break;
case ZipProgressEventType.Saving_BeforeWriteEntry:
//Console.WriteLine("entry {0}", e.CurrentEntry.FileName);
this.label1.Text = e.CurrentEntry.FileName;
break;
case ZipProgressEventType.Saving_AfterWriteEntry:
this.progressBar1.PerformStep();
break;
}
this.Update();
Application.DoEvents();
}
}
private void Zipit(object sender, DoWorkEventArgs e)
{
int delay = 1200; // ms to keep form open after completion
try
{
using (var zip = new ZipFile())
{
zip.AddSelectedFiles(selectionCriteria, ".", "", true);
zip.SaveProgress += this.SaveProgress;
zip.Save(zipfileName);
}
}
catch (Exception ex1)
{
this.label1.Text = "Exception: " + ex1.ToString();
delay = 4000;
}
var timer1 = new System.Timers.Timer(delay);
timer1.Enabled = true;
timer1.AutoReset = false;
timer1.Elapsed += this.OnTimerEvent;
}
// Fields
private String selectionCriteria;
private String zipfileName;
private System.ComponentModel.IContainer components ;
private Label label1;
private ProgressBar progressBar1;
}
}
@@ -0,0 +1,66 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{4bc34fff-1fa8-4f1d-86ff-4842045785de}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>QuickZip</RootNamespace>
<AssemblyName>QuickZip</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>2.0</OldToolsVersion>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="QuickZip.cs" />
<Compile Include="AssemblyInfo.cs" />
<Compile Include="..\..\SolutionInfo.cs">
<Link>Properties\SolutionInfo.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Zip Full DLL\Zip Full DLL.csproj">
<Project>{4F7A9BBE-5221-46C5-9E47-1E8B547CF258}</Project>
<Name>Zip Full DLL</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,210 @@
// ZlibDeflateInflate.cs
// ------------------------------------------------------------------
//
// Copyright (c) 2009 by Dino Chiesa
// All rights reserved!
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// Purpose: Demonstrate compression and decompression with the ZlibCodec
// class, which is part of the Ionic.Zlib namespace.
//
// ------------------------------------------------------------------
//
using System;
using System.Text;
using System.IO;
using System.Reflection;
using System.Security.Cryptography; // HashAlgorithm
using Ionic.Zlib;
// to allow fast ngen
[assembly: AssemblyTitle("ZlibDeflateInflate.cs")]
[assembly: AssemblyDescription("Demonstrate compression and decompression with the ZlibCodec class")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Dino Chiesa")]
[assembly: AssemblyProduct("DotNetZip Examples")]
[assembly: AssemblyCopyright("Copyright © Dino Chiesa 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.1.1.1")]
namespace Ionic.ToolsAndTests
{
public class ZlibDeflateInflate
{
private HashAlgorithm alg = new SHA256CryptoServiceProvider();
public ZlibDeflateInflate () {}
public byte[] ComputeHash(byte[] data)
{
return alg.ComputeHash(data);
}
public byte[] ComputeHash(string text)
{
return alg.ComputeHash(UTF8Encoding.UTF8.GetBytes( text ));
}
private static string ByteArrayToString(byte[] buffer)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (byte b in buffer)
sb.Append(b.ToString("X2"));
return (sb.ToString());
}
public void Run()
{
System.Console.WriteLine("\nThis program demonstrates compression of strings with the\nIonic.Zlib.ZlibCodec class.\n");
string textToCompress = File.ReadAllText("ZlibDeflateInflate.cs");
string hashOfOriginal = ByteArrayToString(ComputeHash(textToCompress));
System.Console.WriteLine("hash of original: {0}", hashOfOriginal);
System.Console.WriteLine("length of original: {0}", textToCompress.Length);
byte[] compressed = ZlibCodecCompress(textToCompress);
System.Console.WriteLine("length of compressed: {0}", compressed.Length);
double compRatio = 100 * (1.0 - (1.0 * compressed.Length) / (1.0 * textToCompress.Length)) ;
System.Console.WriteLine("compression rate: {0:N1}%", compRatio);
string decompressed = ZlibCodecDecompress(compressed);
string hashOfDecompressed = ByteArrayToString(ComputeHash(textToCompress));
System.Console.WriteLine("hash of decompressed: {0}", hashOfDecompressed);
System.Console.WriteLine();
if (hashOfOriginal == hashOfDecompressed)
System.Console.WriteLine("Round trip SUCCESS: After compress and decompress, we obtained the original text.");
else
System.Console.WriteLine("Round trip FAIL: After compress and decompress, we did not obtain the original text.");
}
private byte[] ZlibCodecCompress(string textToCompress)
{
int outputSize = 2048;
byte[] output = new Byte[ outputSize ];
byte[] uncompressed = UTF8Encoding.UTF8.GetBytes( textToCompress );
int lengthToCompress = uncompressed.Length;
// If you want a ZLIB stream, set this to true. If you want
// a bare DEFLATE stream, set this to false.
bool wantRfc1950Header = false;
using ( MemoryStream ms = new MemoryStream())
{
ZlibCodec compressor = new ZlibCodec();
compressor.InitializeDeflate(CompressionLevel.BestCompression, wantRfc1950Header);
compressor.InputBuffer = uncompressed;
compressor.AvailableBytesIn = lengthToCompress;
compressor.NextIn = 0;
compressor.OutputBuffer = output;
foreach (var f in new FlushType[] { FlushType.None, FlushType.Finish } )
{
int bytesToWrite = 0;
do
{
compressor.AvailableBytesOut = outputSize;
compressor.NextOut = 0;
compressor.Deflate(f);
bytesToWrite = outputSize - compressor.AvailableBytesOut ;
if (bytesToWrite > 0)
ms.Write(output, 0, bytesToWrite);
}
while (( f == FlushType.None && (compressor.AvailableBytesIn != 0 || compressor.AvailableBytesOut == 0)) ||
( f == FlushType.Finish && bytesToWrite != 0));
}
compressor.EndDeflate();
ms.Flush();
return ms.ToArray();
}
}
private string ZlibCodecDecompress(byte[] compressed)
{
int outputSize = 2048;
byte[] output = new Byte[ outputSize ];
// If you have a ZLIB stream, set this to true. If you have
// a bare DEFLATE stream, set this to false.
bool expectRfc1950Header = false;
using ( MemoryStream ms = new MemoryStream())
{
ZlibCodec compressor = new ZlibCodec();
compressor.InitializeInflate(expectRfc1950Header);
compressor.InputBuffer = compressed;
compressor.AvailableBytesIn = compressed.Length;
compressor.NextIn = 0;
compressor.OutputBuffer = output;
foreach (var f in new FlushType[] { FlushType.None, FlushType.Finish } )
{
int bytesToWrite = 0;
do
{
compressor.AvailableBytesOut = outputSize;
compressor.NextOut = 0;
compressor.Inflate(f);
bytesToWrite = outputSize - compressor.AvailableBytesOut ;
if (bytesToWrite > 0)
ms.Write(output, 0, bytesToWrite);
}
while (( f == FlushType.None && (compressor.AvailableBytesIn != 0 || compressor.AvailableBytesOut == 0)) ||
( f == FlushType.Finish && bytesToWrite != 0));
}
compressor.EndInflate();
return UTF8Encoding.UTF8.GetString( ms.ToArray() );
}
}
public static void Usage()
{
Console.WriteLine("\nZlibDeflateInflate: <usage statement here>.\n");
Console.WriteLine("Usage:\n ZlibDeflateInflate [-arg1 <value>] [-arg2]");
}
public static void Main(string[] args)
{
try
{
new ZlibDeflateInflate()
.Run();
}
catch (System.Exception exc1)
{
Console.WriteLine("Exception: {0}", exc1.ToString());
Usage();
}
}
}
}
@@ -0,0 +1,123 @@
// ZlibDeflateInflate.cs
// ------------------------------------------------------------------
//
// Copyright (c) 2009 by Dino Chiesa
// All rights reserved!
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// Purpose: Demonstrate compression and decompression with the ZlibStream
// class, which is part of the Ionic.Zlib namespace.
//
// ------------------------------------------------------------------
//
using System;
using System.Reflection;
using Ionic.Zlib;
// to allow fast ngen
[assembly: AssemblyTitle("ZlibStreamExample.cs")]
[assembly: AssemblyDescription("Demonstrate compression and decompression using the ZlibStream class")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Dino Chiesa")]
[assembly: AssemblyProduct("DotNetZip Examples")]
[assembly: AssemblyCopyright("Copyright © Dino Chiesa 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.1.1.1")]
namespace Ionic.ToolsAndTests
{
public class ZlibStreamExample
{
/// <summary>
/// Converts a string to a MemoryStream.
/// </summary>
static System.IO.MemoryStream StringToMemoryStream(string s)
{
byte[] a = System.Text.Encoding.ASCII.GetBytes(s);
return new System.IO.MemoryStream(a);
}
/// <summary>
/// Converts a MemoryStream to a string. Makes some assumptions about the content of the stream.
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
static String MemoryStreamToString(System.IO.MemoryStream ms)
{
byte[] ByteArray = ms.ToArray();
return System.Text.Encoding.ASCII.GetString(ByteArray);
}
static void CopyStream(System.IO.Stream src, System.IO.Stream dest)
{
byte[] buffer = new byte[1024];
int len = src.Read(buffer, 0, buffer.Length);
while (len > 0)
{
dest.Write(buffer, 0, len);
len = src.Read(buffer, 0, buffer.Length);
}
dest.Flush();
}
[STAThread]
public static void Main(System.String[] args)
{
try
{
System.IO.MemoryStream msSinkCompressed;
System.IO.MemoryStream msSinkDecompressed;
ZlibStream zOut;
String originalText = "Hello, World! This String will be compressed... ";
System.Console.Out.WriteLine("original: {0}", originalText);
// first, compress:
msSinkCompressed = new System.IO.MemoryStream();
zOut = new ZlibStream(msSinkCompressed, CompressionMode.Compress, CompressionLevel.BestCompression, true);
CopyStream(StringToMemoryStream(originalText), zOut);
zOut.Close();
// at this point, msSinkCompressed contains the compressed bytes
// now, decompress:
msSinkCompressed.Seek(0, System.IO.SeekOrigin.Begin);
msSinkDecompressed = new System.IO.MemoryStream();
zOut = new ZlibStream(msSinkDecompressed, CompressionMode.Decompress, true);
CopyStream(msSinkCompressed, zOut);
// at this point, msSinkDecompressed contains the decompressed bytes
string decompressed = MemoryStreamToString(msSinkDecompressed);
System.Console.Out.WriteLine("decompressed: {0}", decompressed);
System.Console.WriteLine();
if (originalText == decompressed)
System.Console.WriteLine("A-OK. Compression followed by decompression gets the original text.");
else
System.Console.WriteLine("The compression/decompression cycle failed.");
}
catch (System.Exception e1)
{
Console.WriteLine("Exception: " + e1);
}
}
}
}
+34
View File
@@ -0,0 +1,34 @@
.SUFFIXES: .tlb .il .dll .cpp .cs .vb .rc .ocx .jsl .java
#_NETHOME=$(WINDIR)\Microsoft.NET\Framework\v1.1.4322
#_NETHOME=c:\.net2.0
_NETHOME=c:\.net3.5
#_NETSDK=c:\Progra~1\Microsoft.NET\SDK\v1.1\Bin
#_NETSDK=c:\netsdk2.0\bin
_NETSDK=c:\netsdk3.5\bin
_CS_DBG_FLAGS=/debug+
_CS_DLL_FLAGS=/t:library $(_CS_DBG_FLAGS)
_CS_EXE_FLAGS=/t:exe $(_CS_DBG_FLAGS)
_CSC=$(_NETHOME)\csc.exe
_BASE_IMPORTS=/R:System.dll /R:Ionic.Zlib.dll
default: Ionic.Zlib.dll ZlibDeflateInflate.exe test_dict_deflate_inflate.exe test_flush_sync.exe test_large_deflate_inflate.exe ZlibStreamExample.exe
Ionic.Zlib.dll: ..\..\..\Zlib\obj\Debug\Ionic.Zlib.dll ..\..\..\Zlib\obj\Debug\Ionic.Zlib.pdb
copy ..\..\..\Zlib\obj\Debug\Ionic.Zlib.* .
.cs.exe:
if not exist Ionic.Zlib.dll ( copy ..\..\..\Zlib\obj\Debug\Ionic.Zlib.* . )
$(_CSC) $(_CS_EXE_FLAGS) $(_BASE_IMPORTS) /out:$@ $**
clean:
-del ZlibDeflateInflate.exe test_dict_deflate_inflate.exe test_flush_sync.exe test_large_deflate_inflate.exe ZlibStreamExample.exe
-del Ionic.Zlib.dll
-del *.pdb
@@ -0,0 +1,118 @@
using System;
using Ionic.Zlib;
// Test deflate() with preset dictionary
class test_dict_deflate_inflate
{
[STAThread]
public static void Main(String[] arg)
{
try
{
var x = new test_dict_deflate_inflate();
x.Run();
}
catch (System.Exception e1)
{
Console.WriteLine("Exception: " + e1);
}
}
private void Run()
{
int rc;
int bufferSize = 40000;
byte[] compressedBytes = new byte[bufferSize];
byte[] decompressedBytes = new byte[bufferSize];
ZlibCodec compressingStream = new ZlibCodec();
rc = compressingStream.InitializeDeflate(CompressionLevel.LEVEL9_BEST_COMPRESSION);
CheckForError(compressingStream, rc, "InitializeDeflate");
string dictionaryWord = "hello ";
byte[] dictionary = System.Text.ASCIIEncoding.ASCII.GetBytes(dictionaryWord);
string TextToCompress = "hello, hello! How are you, Joe? ";
byte[] BytesToCompress = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress);
rc = compressingStream.SetDictionary(dictionary);
CheckForError(compressingStream, rc, "SetDeflateDictionary");
long dictId = compressingStream.Adler32;
compressingStream.OutputBuffer = compressedBytes;
compressingStream.NextOut = 0;
compressingStream.AvailableBytesOut = bufferSize;
compressingStream.InputBuffer = BytesToCompress;
compressingStream.NextIn = 0;
compressingStream.AvailableBytesIn = BytesToCompress.Length;
rc = compressingStream.Deflate(ZlibConstants.Z_FINISH);
if (rc != ZlibConstants.Z_STREAM_END)
{
System.Console.Out.WriteLine("deflate should report Z_STREAM_END");
System.Environment.Exit(1);
}
rc = compressingStream.EndDeflate();
CheckForError(compressingStream, rc, "deflateEnd");
ZlibCodec decompressingStream = new ZlibCodec();
decompressingStream.InputBuffer = compressedBytes;
decompressingStream.NextIn = 0;
decompressingStream.AvailableBytesIn = bufferSize;
rc = decompressingStream.InitializeInflate();
CheckForError(decompressingStream, rc, "inflateInit");
decompressingStream.OutputBuffer = decompressedBytes;
decompressingStream.NextOut = 0;
decompressingStream.AvailableBytesOut = decompressedBytes.Length;
while (true)
{
rc = decompressingStream.Inflate(ZlibConstants.Z_NO_FLUSH);
if (rc == ZlibConstants.Z_STREAM_END)
{
break;
}
if (rc == ZlibConstants.Z_NEED_DICT)
{
if ((int)decompressingStream.Adler32 != (int)dictId)
{
System.Console.Out.WriteLine("unexpected dictionary");
System.Environment.Exit(1);
}
rc = decompressingStream.SetDictionary(dictionary);
}
CheckForError(decompressingStream, rc, "inflate with dict");
}
rc = decompressingStream.EndInflate();
CheckForError(decompressingStream, rc, "EndInflate");
int j = 0;
for (; j < decompressedBytes.Length; j++)
if (decompressedBytes[j] == 0)
break;
var result = System.Text.ASCIIEncoding.ASCII.GetString(decompressedBytes, 0, j);
Console.WriteLine("orig length: {0}", TextToCompress.Length);
Console.WriteLine("compressed length: {0}", compressingStream.TotalBytesOut);
Console.WriteLine("decompressed length: {0}", decompressingStream.TotalBytesOut);
Console.WriteLine("result length: {0}", result.Length);
Console.WriteLine("result of inflate:\n{0}", result);
}
internal static void CheckForError(ZlibCodec z, int err, System.String msg)
{
if (err != ZlibConstants.Z_OK)
{
if (z.Message != null)
System.Console.Out.Write(z.Message + " ");
System.Console.Out.WriteLine(msg + " error: " + err);
System.Environment.Exit(1);
}
}
}
@@ -0,0 +1,120 @@
using System;
using Ionic.Zlib;
// Test deflate() with full flush
class test_flush_sync
{
[STAThread]
public static void Main(System.String[] args)
{
try
{
var x = new test_flush_sync();
x.Run();
}
catch (System.Exception e1)
{
Console.WriteLine("Exception: " + e1);
}
}
private void Run()
{
int rc;
int comprLen = 40000;
int uncomprLen = comprLen;
byte[] CompressedBytes = new byte[comprLen];
byte[] DecompressedBytes = new byte[uncomprLen];
string TextToCompress = "This is the text that will be compressed.";
byte[] BytesToCompress = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress);
ZlibCodec compressor = new ZlibCodec(CompressionMode.Compress);
compressor.InputBuffer = BytesToCompress;
compressor.NextIn = 0;
compressor.OutputBuffer = CompressedBytes;
compressor.NextOut = 0;
compressor.AvailableBytesIn = 3;
compressor.AvailableBytesOut = CompressedBytes.Length;
rc = compressor.Deflate(ZlibConstants.Z_FULL_FLUSH);
CheckForError(compressor, rc, "Deflate");
CompressedBytes[3]++; // force an error in first compressed block // dinoch
compressor.AvailableBytesIn = TextToCompress.Length - 3;
rc = compressor.Deflate(ZlibConstants.Z_FINISH);
if (rc != ZlibConstants.Z_STREAM_END)
{
CheckForError(compressor, rc, "Deflate");
}
rc = compressor.EndDeflate();
CheckForError(compressor, rc, "EndDeflate");
comprLen = (int) (compressor.TotalBytesOut);
ZlibCodec decompressor = new ZlibCodec(CompressionMode.Decompress);
decompressor.InputBuffer = CompressedBytes;
decompressor.NextIn = 0;
decompressor.AvailableBytesIn = 2;
decompressor.OutputBuffer = DecompressedBytes;
decompressor.NextOut = 0;
decompressor.AvailableBytesOut = DecompressedBytes.Length;
rc = decompressor.Inflate(ZlibConstants.Z_NO_FLUSH);
CheckForError(decompressor, rc, "Inflate");
decompressor.AvailableBytesIn = CompressedBytes.Length - 2;
rc = decompressor.SyncInflate();
CheckForError(decompressor, rc, "SyncInflate");
bool gotException = false;
try
{
rc = decompressor.Inflate(ZlibConstants.Z_FINISH);
}
catch (ZlibException ex1)
{
Console.WriteLine("Got Expected Exception: " + ex1);
gotException = true;
}
if (!gotException)
{
System.Console.Out.WriteLine("inflate should report DATA_ERROR");
/* Because of incorrect adler32 */
System.Environment.Exit(1);
}
rc = decompressor.EndInflate();
CheckForError(decompressor, rc, "EndInflate");
int j = 0;
for (; j < DecompressedBytes.Length; j++)
if (DecompressedBytes[j] == 0)
break;
var result = System.Text.ASCIIEncoding.ASCII.GetString(DecompressedBytes, 0, j);
Console.WriteLine("orig length: {0}", TextToCompress.Length);
Console.WriteLine("compressed length: {0}", compressor.TotalBytesOut);
Console.WriteLine("uncompressed length: {0}", decompressor.TotalBytesOut);
Console.WriteLine("result length: {0}", result.Length);
Console.WriteLine("result of inflate:\n(Thi){0}", result);
}
internal static void CheckForError(ZlibCodec z, int rc, System.String msg)
{
if (rc != ZlibConstants.Z_OK)
{
if (z.Message != null)
System.Console.Out.Write(z.Message + " ");
System.Console.Out.WriteLine(msg + " error: " + rc);
System.Environment.Exit(1);
}
}
}
@@ -0,0 +1,147 @@
using System;
using Ionic.Zlib;
// Test deflate() with large buffers and dynamic change of compression level
class test_large_deflate_inflate
{
[STAThread]
public static void Main(System.String[] arg)
{
try
{
var x = new test_large_deflate_inflate();
x.Run();
}
catch (System.Exception e1)
{
Console.WriteLine("Exception: " + e1);
}
}
private void Run()
{
int rc;
int j;
int bufferSize = 40000;
byte[] compressedBytes = new byte[bufferSize];
byte[] bufferToCompress= new byte[bufferSize];
byte[] decompressedBytes = new byte[bufferSize];
ZlibCodec compressingStream= new ZlibCodec();
rc = compressingStream.InitializeDeflate(CompressionLevel.BestSpeed);
CheckForError(compressingStream, rc, "InitializeDeflate");
compressingStream.OutputBuffer = compressedBytes;
compressingStream.NextOut = 0;
compressingStream.AvailableBytesOut = compressedBytes.Length;
// At this point, bufferToCompress is all zeroes, so it should compress
// very well:
compressingStream.InputBuffer = bufferToCompress;
compressingStream.AvailableBytesIn = bufferToCompress.Length;
rc = compressingStream.Deflate(FlushType.None);
CheckForError(compressingStream, rc, "deflate");
if (compressingStream.AvailableBytesIn != 0)
{
System.Console.Out.WriteLine("deflate not greedy");
System.Environment.Exit(1);
}
Console.WriteLine("Stage 1: uncompressed bytes in so far: {0,6}", compressingStream.TotalBytesIn);
Console.WriteLine(" compressed bytes out so far: {0,6}", compressingStream.TotalBytesOut);
// Feed in already compressed data and switch to no compression:
compressingStream.SetDeflateParams(CompressionLevel.None, CompressionStrategy.Default);
compressingStream.InputBuffer = compressedBytes;
compressingStream.NextIn = 0;
compressingStream.AvailableBytesIn = bufferSize / 2; // why? - for fun
rc = compressingStream.Deflate(FlushType.None);
CheckForError(compressingStream, rc, "Deflate");
Console.WriteLine("Stage 2: uncompressed bytes in so far: {0,6}", compressingStream.TotalBytesIn);
Console.WriteLine(" compressed bytes out so far: {0,6}", compressingStream.TotalBytesOut);
// Insert data into bufferToCompress, and Switch back to compressing mode:
System.Random rnd = new Random();
for (int i = 0; i < bufferToCompress.Length / 1000; i++)
{
byte b = (byte) rnd.Next();
int n = 500 + rnd.Next(500);
for (j = 0; j < n; j++)
bufferToCompress[j + i] = b;
i += j-1;
}
compressingStream.SetDeflateParams(CompressionLevel.BestCompression, CompressionStrategy.Filtered);
compressingStream.InputBuffer = bufferToCompress;
compressingStream.NextIn = 0;
compressingStream.AvailableBytesIn = bufferToCompress.Length;
rc = compressingStream.Deflate(FlushType.None);
CheckForError(compressingStream, rc, "Deflate");
Console.WriteLine("Stage 3: uncompressed bytes in so far: {0,6}", compressingStream.TotalBytesIn);
Console.WriteLine(" compressed bytes out so far: {0,6}", compressingStream.TotalBytesOut);
rc = compressingStream.Deflate(FlushType.Finish);
if (rc != ZlibConstants.Z_STREAM_END)
{
Console.WriteLine("deflate reported {0}, should report Z_STREAM_END", rc);
Environment.Exit(1);
}
rc = compressingStream.EndDeflate();
CheckForError(compressingStream, rc, "EndDeflate");
Console.WriteLine("Stage 4: uncompressed bytes in (final): {0,6}", compressingStream.TotalBytesIn);
Console.WriteLine(" compressed bytes out (final): {0,6}", compressingStream.TotalBytesOut);
ZlibCodec decompressingStream = new ZlibCodec(CompressionMode.Decompress);
decompressingStream.InputBuffer = compressedBytes;
decompressingStream.NextIn = 0;
decompressingStream.AvailableBytesIn = bufferSize;
// upon inflating, we overwrite the decompressedBytes buffer repeatedly
while (true)
{
decompressingStream.OutputBuffer = decompressedBytes;
decompressingStream.NextOut = 0;
decompressingStream.AvailableBytesOut = decompressedBytes.Length;
rc = decompressingStream.Inflate(FlushType.None);
if (rc == ZlibConstants.Z_STREAM_END)
break;
CheckForError(decompressingStream, rc, "inflate large");
}
rc = decompressingStream.EndInflate();
CheckForError(decompressingStream, rc, "EndInflate");
if (decompressingStream.TotalBytesOut != 2 * decompressedBytes.Length + bufferSize / 2)
{
System.Console.WriteLine("bad large inflate: " + decompressingStream.TotalBytesOut);
System.Environment.Exit(1);
}
for (j = 0; j < decompressedBytes.Length; j++)
if (decompressedBytes[j] == 0)
break;
Console.WriteLine("compressed length: {0}", compressingStream.TotalBytesOut);
Console.WriteLine("decompressed length (expected): {0}", 2 * decompressedBytes.Length + bufferSize / 2);
Console.WriteLine("decompressed length (actual) : {0}", decompressingStream.TotalBytesOut);
}
internal static void CheckForError(ZlibCodec z, int rc, System.String msg)
{
if (rc != ZlibConstants.Z_OK)
{
if (z.Message != null)
System.Console.Out.Write(z.Message + " ");
System.Console.Out.WriteLine(msg + " error: " + rc);
System.Environment.Exit(1);
}
}
}
+73
View File
@@ -0,0 +1,73 @@
// ZipDir.cs
//
// ----------------------------------------------------------------------
// Copyright (c) 2006, 2007, 2008 Microsoft Corporation. All rights reserved.
//
// This example is released under the Microsoft Permissive License of
// October 2006. See the license.txt file accompanying this release for
// full details.
//
// ----------------------------------------------------------------------
//
// This utility zips up a single directory specified on the command line.
// It is like a specialized ZipIt tool (See ZipIt.cs).
//
// compile with:
// csc /debug+ /target:exe /r:Zip.dll /out:ZipDir.exe ZipDir.cs
//
// Wed, 29 Mar 2006 14:36
//
using System;
using Ionic.Zip;
namespace Ionic.Zip.Examples
{
public class ZipDir
{
private static void Usage()
{
Console.WriteLine("usage:\n ZipDir <ZipFileToCreate> <directory>");
Environment.Exit(1);
}
public static void Main(String[] args)
{
if (args.Length != 2) Usage();
if (!System.IO.Directory.Exists(args[1]))
{
Console.WriteLine("The directory does not exist!\n");
Usage();
}
if (System.IO.File.Exists(args[0]))
{
Console.WriteLine("That zipfile already exists!\n");
Usage();
}
if (!args[0].EndsWith(".zip"))
{
Console.WriteLine("The filename must end with .zip!\n");
Usage();
}
string ZipFileToCreate = args[0];
string DirectoryToZip = args[1];
try
{
using (ZipFile zip = new ZipFile())
{
zip.StatusMessageTextWriter = System.Console.Out;
zip.AddDirectory(DirectoryToZip); // recurses subdirectories
zip.Save(ZipFileToCreate);
}
}
catch (System.Exception ex1)
{
System.Console.Error.WriteLine("exception: " + ex1);
}
}
}
}
+101
View File
@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{E04C2A53-3981-44D4-94AF-6AC07D97CDE8}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ZipDir</RootNamespace>
<AssemblyName>ZipDir</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\SolutionInfo.cs">
<Link>Properties\SolutionInfo.cs</Link>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ZipDir.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Zip\Zip DLL.csproj">
<Project>{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}</Project>
<Name>Zip DLL</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+92
View File
@@ -0,0 +1,92 @@
namespace ZipTreeView
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.treeView1 = new System.Windows.Forms.TreeView();
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.treeView1.Location = new System.Drawing.Point(12, 39);
this.treeView1.Name = "treeView1";
this.treeView1.Size = new System.Drawing.Size(260, 213);
this.treeView1.TabIndex = 0;
//
// textBox1
//
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.textBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;
this.textBox1.Location = new System.Drawing.Point(12, 12);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(206, 20);
this.textBox1.TabIndex = 1;
//
// button1
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.button1.Location = new System.Drawing.Point(225, 11);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(47, 23);
this.button1.TabIndex = 2;
this.button1.Text = "open";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 264);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.treeView1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Form1";
this.Text = "Zip TreeView (C#)";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
}
}
@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
using Ionic.Zip;
namespace ZipTreeView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.textBox1.BackColor = System.Drawing.Color.White;
string txt = this.textBox1.Text;
try
{
this.treeView1.Nodes.Clear();
using (var zip = ZipFile.Read(txt))
{
foreach (var entry in zip)
{
AddTreeNode(entry.FileName);
}
}
}
catch
{
this.textBox1.BackColor = System.Drawing.Color.MistyRose;
MessageBox.Show("Exception reading that zip file.");
}
}
private TreeNode AddTreeNode(string name)
{
if (name.EndsWith("/"))
name = name.Substring(0, name.Length - 1);
TreeNode node = FindNodeForTag(name, this.treeView1.Nodes);
if (node != null)
return node;
String parent = Path.GetDirectoryName(name);
TreeNodeCollection pnodeCollection = (parent == "")
? this.treeView1.Nodes
: AddTreeNode(parent.Replace("\\", "/")).Nodes;
node = new TreeNode()
{
Text = Path.GetFileName(name),
Tag = name // ' full path
};
pnodeCollection.Add(node);
return node;
}
// Returns the TreeNode for a given name
private TreeNode FindNodeForTag(string name, TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
if (name == (string) node.Tag)
return node;
else if (name.StartsWith(node.Tag + "/"))
return FindNodeForTag(name, node.Nodes);
}
return null;
}
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace ZipTreeView
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
@@ -0,0 +1,12 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("ZipTreeView")]
[assembly: AssemblyDescription("Example showing a zipfile in a WinForms TreeView")]
[assembly: AssemblyConfiguration("")]
[assembly: ComVisible(false)]
[assembly: Guid("c40b5ebc-ea71-420e-8f61-46582173dbb9")]
@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.225
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ZipTreeView.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ZipTreeView.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.225
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ZipTreeView.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1BCEC4DE-A73D-49A6-869F-EDA4AB6B41EF}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ZipTreeView</RootNamespace>
<AssemblyName>ZipTreeView</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\..\SolutionInfo.cs">
<Link>Properties\SolutionInfo.cs</Link>
</Compile>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Zip\Zip DLL.csproj">
<Project>{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}</Project>
<Name>Zip DLL</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -0,0 +1,127 @@
// CreateWithProgress.cpp
//
// Example: creating a zip file, with progress events, from C++.
//
// This code is part of DotNetZip.
//
//
// Last saved: <2010-June-01 10:32:21>
//
using namespace System;
using namespace System::IO;
using namespace Ionic::Zip;
public ref class DnzHelloCppCli
{
private:
bool justHadByteUpdate;
public:
DnzHelloCppCli()
{
}
public:
void Run()
{
Console::WriteLine(L"Hello World");
Console::WriteLine("Using DotNetZip version {0}", ZipFile::LibraryVersion);
array<String^>^ filesToAdd = System::IO::Directory::GetFiles(".", "*.cpp");
ZipFile ^ zip;
try
{
zip = gcnew ZipFile();
zip->Password = "Harbinger";
zip->Encryption = EncryptionAlgorithm::WinZipAes128;
zip->SaveProgress += gcnew EventHandler<SaveProgressEventArgs^>(this, &DnzHelloCppCli::SaveProgress);
zip->AddEntry("Readme.txt", "This is the content for the Readme.txt entry.");
zip->AddFiles(filesToAdd, "files");
zip->Save("MyArchive.zip");
}
finally
{
zip->~ZipFile();
}
Console::WriteLine(L"Press <ENTER> to quit.");
Console::ReadLine();
return;
}
public:
void SaveProgress(Object^ sender, SaveProgressEventArgs^ e)
{
switch (e->EventType)
{
case ZipProgressEventType::Saving_Started:
{
Console::WriteLine("Saving: {0}", e->ArchiveName);
break;
}
case ZipProgressEventType::Saving_BeforeWriteEntry:
{
if (this->justHadByteUpdate)
{
Console::WriteLine();
}
Console::WriteLine(" Writing: {0} ({1}/{2})",
e->CurrentEntry->FileName,
(e->EntriesSaved + 1),
e->EntriesTotal);
this->justHadByteUpdate = false;
break;
}
case ZipProgressEventType::Saving_AfterWriteEntry:
{
if (e->CurrentEntry->InputStreamWasJitProvided)
{
e->CurrentEntry->InputStream->Close();
e->CurrentEntry->InputStream = nullptr;
}
break;
}
case ZipProgressEventType::Saving_Completed:
{
this->justHadByteUpdate = false;
Console::WriteLine();
Console::WriteLine("Done: {0}", e->ArchiveName);
break;
}
case ZipProgressEventType::Saving_EntryBytesRead:
{
if (this->justHadByteUpdate)
{
Console::SetCursorPosition(0, Console::CursorTop);
}
Console::Write(" {0}/{1} ({2:N0}%)",
e->BytesTransferred,
e->TotalBytesToTransfer,
(((double) e->BytesTransferred) / (0.01 * e->TotalBytesToTransfer)));
this->justHadByteUpdate = true;
break;
}
}
}
};
int main(array<System::String ^> ^args)
{
try
{
DnzHelloCppCli^ me = gcnew DnzHelloCppCli();
me->Run();
}
catch (Exception^ ex1)
{
Console::Error->WriteLine(String::Concat("exception: ", ex1));
}
return 0;
}
+38
View File
@@ -0,0 +1,38 @@
// CreateZipFile.cpp
//
// Example: creating a zip file from C++.
//
// This code is part of DotNetZip.
//
//
// Last saved: <2010-June-01 10:32:15>
//
using namespace System;
using namespace Ionic::Zip;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
Console::WriteLine(L"Creating a zip file from C++/CLI using DotNetZip...");
ZipFile ^ zip;
try
{
zip = gcnew ZipFile();
zip->AddEntry("Readme.txt", "This is the content for the Readme.txt entry.");
zip->AddFile("CreateZipFile.cpp");
zip->Save("test.zip");
}
finally
{
//zip->~ZipFile();
delete zip;
}
Console::WriteLine(L"Press <ENTER> to quit.");
Console::ReadLine();
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
setlocal
if not exist Ionic.Zip.dll (
fsutil hardlink create "Ionic.Zip.dll" "c:\dinoch\dev\dotnet\zip\DotNetZip\Zip Full DLL\bin\Debug\Ionic.Zip.dll"
)
set CLCMD=\vc9\bin\cl.exe
set LINKCMD=\vc9\bin\link.exe
set MTCMD=c:\netsdk2.0\Bin\mt.exe
for %%F in (CreateWithProgress CreateZipFile) do call :COMPILE_ONE_APP %%F
goto ALL_DONE
--------------------------------------------
:COMPILE_ONE_APP
@REM Arg: basename
set fileToBuild=%1
%CLCMD% /Od /D "WIN32" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /FD /EHa /MDd /Fo".\\" -I\vc9\include -I\winsdk\include /W3 /c /Zi /clr /TP /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" /FU Ionic.Zip.dll %fileToBuild%.cpp
%LINKCMD% /OUT:%fileToBuild%.exe /MANIFEST /MANIFESTFILE:"%fileToBuild%.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /ASSEMBLYDEBUG /PDB:%fileToBuild%.pdb /DYNAMICBASE /FIXED:No /NXCOMPAT /MACHINE:X86 /LIBPATH:\vc9\lib /LIBPATH:\winsdk\lib %fileToBuild%.obj
%MTCMD% /outputresource:"%fileToBuild%.exe;#1" /manifest %fileToBuild%.exe.intermediate.manifest
del %fileToBuild%.exe.intermediate.manifest
@GOTO:EOF
--------------------------------------------
:ALL_DONE
endlocal
+13
View File
@@ -0,0 +1,13 @@
del *.obj
del Ionic.Zip.dll
del *.cpp~
del Create*.exe
del Create*.exp
del Create*.ilk
del *.pdb
del *.exe.intermediate.manifest
del *.idb
del MyArchive.zip
del test.zip
del *.cmd~
@@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{D2E7C1EA-6FF1-4E26-96FC-24F6FB68B61B}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Ionic.Examples.Smartphone.Zip</RootNamespace>
<AssemblyName>CF-Unzipper</AssemblyName>
<PlatformFamilyName>Smartphone</PlatformFamilyName>
<PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>
<OSVersion>5.2</OSVersion>
<DeployDirSuffix>SmartDeviceProject3</DeployDirSuffix>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<NativePlatformName>Windows Mobile 6 Standard SDK</NativePlatformName>
<FormFactorID>
</FormFactorID>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>4.0</OldToolsVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<UpgradeBackupLocation />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;$(PlatformFamilyName); NETCF</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<FileAlignment>512</FileAlignment>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;$(PlatformFamilyName); NETCF</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<FileAlignment>512</FileAlignment>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="System" />
<!-- Reference Include="System.Core" / -->
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Images\Card.gif" />
<EmbeddedResource Include="Images\Device.gif" />
<EmbeddedResource Include="Images\Folder.gif" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Zip CF\Zip CF DLL.csproj">
<Project>{051C2B3B-8CDF-42CB-9EA2-027232BFC395}</Project>
<Name>Zip CF DLL</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Condition="'$(TargetFrameworkVersion)' == 'v3.5'" Project="C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.CSharp.targets" />
<Import Condition="'$(TargetFrameworkVersion)' == 'v2.0'" Project="C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.CompactFramework.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">
<HostingProcess disable="1" />
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -0,0 +1,113 @@
namespace SmartDeviceProject3
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.MainMenu mainMenu1;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.menuItemUnzip = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.menuItemDelete = new System.Windows.Forms.MenuItem();
this.menuItemAbout = new System.Windows.Forms.MenuItem();
this.menuItemQuit = new System.Windows.Forms.MenuItem();
this.tvFolders = new System.Windows.Forms.TreeView();
this.imageList1 = new System.Windows.Forms.ImageList();
this.SuspendLayout();
//
// mainMenu1
//
this.mainMenu1.MenuItems.Add(this.menuItemUnzip);
this.mainMenu1.MenuItems.Add(this.menuItem2);
//
// menuItemUnzip
//
this.menuItemUnzip.Text = "Unzip";
this.menuItemUnzip.Click += new System.EventHandler(this.menuItemUnzip_Click);
//
// menuItem2
//
this.menuItem2.MenuItems.Add(this.menuItemDelete);
this.menuItem2.MenuItems.Add(this.menuItemAbout);
this.menuItem2.MenuItems.Add(this.menuItemQuit);
this.menuItem2.Text = "Menu";
//
// menuItemDelete
//
this.menuItemDelete.Text = "Delete";
this.menuItemDelete.Click += new System.EventHandler(this.menuItemDelete_Click);
//
// menuItemAbout
//
this.menuItemAbout.Text = "About";
this.menuItemAbout.Click += new System.EventHandler(this.menuItemAbout_Click);
//
// menuItemQuit
//
this.menuItemQuit.Text = "Quit";
this.menuItemQuit.Click += new System.EventHandler(this.menuItemQuit_Click);
//
// tvFolders
//
this.tvFolders.Dock = System.Windows.Forms.DockStyle.Fill;
this.tvFolders.Location = new System.Drawing.Point(0, 0);
this.tvFolders.Name = "tvFolders";
this.tvFolders.Size = new System.Drawing.Size(320, 186);
this.tvFolders.TabIndex = 0;
this.tvFolders.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvFolders_AfterSelect);
//
// imageList1
//
this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(131F, 131F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(320, 186);
this.Controls.Add(this.tvFolders);
this.Font = new System.Drawing.Font("Segoe Condensed", 9F, System.Drawing.FontStyle.Bold);
this.Menu = this.mainMenu1;
this.Name = "Form1";
this.Text = "Unzipper - browse and unzip";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TreeView tvFolders;
private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.MenuItem menuItemUnzip;
private System.Windows.Forms.MenuItem menuItem2;
private System.Windows.Forms.MenuItem menuItemDelete;
private System.Windows.Forms.MenuItem menuItemAbout;
private System.Windows.Forms.MenuItem menuItemQuit;
}
}
@@ -0,0 +1,279 @@
using System;
using System.IO;
using System.Windows.Forms;
using Ionic.Zip;
namespace SmartDeviceProject3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CustomInit();
}
#region Helpers
private void CustomInit()
{
//add folder images to imagelist
this.imageList1.Images.Add(new System.Drawing.Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Ionic.Examples.Smartphone.Zip.Images.Folder.gif")));
this.imageList1.Images.Add(new System.Drawing.Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Ionic.Examples.Smartphone.Zip.Images.Device.gif")));
this.imageList1.Images.Add(new System.Drawing.Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Ionic.Examples.Smartphone.Zip.Images.Card.gif")));
//set default image index to 0
tvFolders.ImageIndex = 0;
tvFolders.SelectedImageIndex = 0;
//use a backslash between path levels
tvFolders.PathSeparator = "\\";
//setup default tree
Reset();
}
public void Reset()
{
//restores dialog to initial settings and repopulates folders
this._selectedpath = "";
tvFolders.Nodes.Clear();
//add the root (device) node to the tree
AddRoot();
//add root level subfolders
AddChildren(tvFolders.Nodes[0]);
//expand the top level folders
tvFolders.Nodes[0].Expand();
}
private void AddRoot()
{
//stop updates during filling
tvFolders.BeginUpdate();
//add an empty node (use device image)
TreeNode root = tvFolders.Nodes.Add("");
root.ImageIndex = 1;
root.SelectedImageIndex = 1;
tvFolders.EndUpdate();
}
/// <summary>
/// Adds subfolders to a specified node in the tree
/// </summary>
/// <param name="tn">Node to add sub-folders to</param>
private void AddChildren(TreeNode tn)
{
//stop updates during filling
tvFolders.BeginUpdate();
//path to query for subfolders
string path = (tn.FullPath == "")
? "\\"
: tn.FullPath;
//clear any existing subnodes
tn.Nodes.Clear();
//get all folders beneath the selected node
foreach (string directory in System.IO.Directory.GetDirectories(path))
{
TreeNode node = new TreeNode();
//format human friendly name
node.Text = directory.Substring(directory.LastIndexOf("\\") + 1, directory.Length - directory.LastIndexOf("\\") - 1);
//change icon if folder is a storage card
DirectoryInfo di = new DirectoryInfo(directory);
if ((di.Attributes & FileAttributes.Temporary) == FileAttributes.Temporary)
{
node.ImageIndex = 2;
node.SelectedImageIndex = 2;
}
//add to root of tree
tn.Nodes.Add(node);
}
//get all files beneath the selected node
foreach (string zipfilename in System.IO.Directory.GetFiles(path))
{
TreeNode node = new TreeNode();
//format human friendly name
node.Text = System.IO.Path.GetFileName(zipfilename);
//node.Text = zipfile.Substring(directory.LastIndexOf("\\") + 1, directory.Length - directory.LastIndexOf("\\") - 1);
//add to root of tree
tn.Nodes.Add(node);
}
//restore events etc
tvFolders.EndUpdate();
}
#endregion
#region Public Properties
/// <summary>
/// Gets or sets the path selected by the user.
/// </summary>
public string SelectedPath
{
get
{
return _selectedpath;
}
set
{
//check that value passed is a valid file system path
if (Directory.Exists(value))
{
_selectedpath = value;
//split the path into each folder layer
string[] layers = value.Split('\\');
//mark the current node
TreeNode tn = tvFolders.Nodes[0];
//loop through the folder levels
foreach (string folderlevel in layers)
{
//ignore blank (top-level node)
if (folderlevel != "")
{
//add sub-folders
AddChildren(tn);
//find the required subfolder
foreach (TreeNode thisnode in tn.Nodes)
{
//check node text
if (thisnode.Text == folderlevel)
{
//if it does set it and continue processing the next level
tn = thisnode;
break;
}
}
}
}
//select the final node
tvFolders.SelectedNode = tn;
}
}
}
#endregion
#region Private Fields
private string _selectedpath;
#endregion
#region Events
private void tvFolders_AfterSelect(object sender, TreeViewEventArgs e)
{
//set the currently selected folder/file
_selectedpath = (tvFolders.SelectedNode.FullPath == "")
? "\\"
: tvFolders.SelectedNode.FullPath;
if (System.IO.Directory.Exists(_selectedpath))
{
menuItemUnzip.Enabled = false;
//if there are no child nodes we will check for any and add them
if (tvFolders.SelectedNode.Nodes.Count == 0)
{
AddChildren(tvFolders.SelectedNode);
}
}
else if (Ionic.Zip.ZipFile.IsZipFile(_selectedpath))
{
menuItemUnzip.Enabled = true;
}
}
private void menuItemUnzip_Click(object sender, EventArgs e)
{
if (System.IO.File.Exists(_selectedpath))
{
UnzipSelectedFile();
}
}
private void UnzipSelectedFile()
{
string parent = System.IO.Path.GetDirectoryName(_selectedpath);
string dir = System.IO.Path.Combine(parent,
System.IO.Path.GetFileNameWithoutExtension(_selectedpath));
try
{
using (var zip1 = Ionic.Zip.ZipFile.Read(_selectedpath))
{
foreach (var entry in zip1)
{
entry.Extract(dir, ExtractExistingFileAction.OverwriteSilently);
}
}
// re-populate the treeview with the extracted files:
AddChildren(tvFolders.SelectedNode.Parent);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void menuItemDelete_Click(object sender, EventArgs e)
{
try
{
if (System.IO.File.Exists(_selectedpath))
{
System.IO.File.Delete(_selectedpath);
}
else if (System.IO.Directory.Exists(_selectedpath))
{
System.IO.Directory.Delete(_selectedpath, true);
}
// refresh the treeview
AddChildren(tvFolders.SelectedNode.Parent);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void menuItemQuit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void menuItemAbout_Click(object sender, EventArgs e)
{
MessageBox.Show("DotNetZip CF Unzipper. " +
"This example shows how to use the DotNetZip library in a .NET Compact Framework application. " +
"Built in VS2008 in December 2008.",
"About Unzipper",
MessageBoxButtons.OK,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);
}
#endregion
}
}
@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="mainMenu1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>134, 17</value>
</metadata>
<metadata name="$this.FormFactorShadowProperty" xml:space="preserve">
<value>Smartphone Landscape</value>
</metadata>
<metadata name="$this.Skin" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>
Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace SmartDeviceProject3
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[MTAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
@@ -0,0 +1,65 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.225
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Ionic.Examples.Smartphone.Zip.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
#if !NETCF
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
#endif
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Ionic.Examples.Smartphone.Zip.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,43 @@
<?php
try
{
echo '<html>';
echo ' <head>';
echo ' <title>Calling .NET from PHP through COM</title>';
echo ' <link rel="stylesheet" href="basic.css"/>';
echo ' </head>';
echo '<body>';
echo '<h2>Hello!</h2>' . "<br/>\n";
echo '<h4>Trying static method</h4>' . "<br/>\n";
$fname = "archive-" . date('Y-m-d-His') . ".zip";
echo 'Dynamically generated archive name: ' . "\n" . '<h4>' . $fname . "</h4>\n";
$zipOutput = "c:\\temp\\php-" . $fname;
$zipfact = new COM("Ionic.Zip.ZipFile");
$zip = $zipfact->Read($zipOutput);
$zip->Encryption = 3;
$zip->Password = "AES-Encryption-Is-Secure";
$dirToZip= "c:\\temp\\psh";
$zip->AddDirectory($dirToZip);
$zip->Save();
echo '<br/>The file was saved to ' . $zip->Name . '<br/>' . "\n";
$zip->Dispose();
echo '</body>';
echo '</html>';
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
echo '<pre>';
echo $e->getTraceAsString(), "\n";
echo '</pre>';
}
?>
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{95D9690B-3B37-4800-A511-6FB21436638B}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>QuickUnzip.Ionic.Zip.Examples.VB.QuickUnzip</StartupObject>
<RootNamespace>QuickUnzip</RootNamespace>
<AssemblyName>QuickUnzip</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<OptionExplicit>On</OptionExplicit>
<OptionCompare>Binary</OptionCompare>
<OptionStrict>Off</OptionStrict>
<OptionInfer>On</OptionInfer>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>QuicknUnzip.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>QuickUnzip.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="Qunzip.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="AssemblyInfo.vb" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Zip\Zip DLL.csproj">
<Project>{D3B0AD67-44D8-4B3D-BED9-CE1FD6DE2C5A}</Project>
<Name>Zip DLL</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="My Project\" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+189
View File
@@ -0,0 +1,189 @@
'' qunzip.vb
'' ------------------------------------------------------------------
''
'' A simple app that unzips a file, showing a progress bar.
'' It is both a console app, and a winforms app.
''
'' It correctly does the multi-threading to allow smooth UI update.
''
'' compile it with:
'' c:\.net3.5\vbc.exe /t:exe /debug:full /optimize- /R:System.dll /R:System.Data.dll /R:Ionic.Zip.dll
'' /out:Qunzip.exe Qunzip.vb
''
'' built on host: DINOCH-2
'' Created Thu Aug 06 15:34:17 2009
''
'' last saved:
'' Time-stamp: <2009-October-26 23:03:36>
'' ------------------------------------------------------------------
''
'' Copyright (c) 2009 by Dino Chiesa
'' All rights reserved!
''
'' Licensed under the Microsoft Public License.
'' see http://www.opensource.org/licenses/ms-pl.html
''
'' ------------------------------------------------------------------
Imports System
Imports System.Reflection
Imports System.Windows.Forms
Imports Ionic.Zip
Namespace Ionic.Zip.Examples.VB
Friend Class QuickUnzip
<System.Runtime.InteropServices.DllImport("kernel32.dll")> _
Private Shared Function AllocConsole() As Boolean
End Function
<System.Runtime.InteropServices.DllImport("kernel32.dll")> _
Private Shared Function AttachConsole(ByVal pid As Integer) As Boolean
End Function
<STAThread> _
Public Shared Sub Main(ByVal args As String())
If (args.Length <> 2) Then
'' open a new window so we can write to it.
QuickUnzip.AllocConsole
QuickUnzip.Usage(args)
Return
Else
Application.EnableVisualStyles
Application.SetCompatibleTextRenderingDefault(False)
Dim f As New QuickUnzipForm(args(0), args(1))
Application.Run(f)
End If
Return
End Sub
Private Shared Function Usage(ByVal args As String()) as Integer
Console.WriteLine("QuickUnzip. Usage: QuickUnzip <zipfile> <extractDirectory>")
Console.WriteLine(System. Environment.NewLine & "<ENTER> to continue...")
Console.ReadLine
Return 1
End Function
End Class
Public Class QuickUnzipForm
Inherits Form
Public Sub New()
Me.components = Nothing
Me.InitializeComponent
End Sub
Public Sub New(ByVal zipfile As String, ByVal directory As String)
Me.New()
Me.zipfileName = zipfile
Me.extractDirectory = directory
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If (disposing AndAlso (Not Me.components Is Nothing)) Then
Me.components.Dispose
End If
MyBase.Dispose(disposing)
End Sub
Private Sub FixTitle()
Me.Text = String.Format("Quick Unzip {0}", Me.zipfileName)
End Sub
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.label1 = New Label
Me.progressBar1 = New ProgressBar
MyBase.SuspendLayout
Me.label1.AutoSize = True
Me.label1.Location = New System.Drawing.Point(12, 12)
Me.label1.Name = "label1"
Me.label1.Size = New System.Drawing.Size(50, 13)
Me.label1.TabIndex = 2
Me.label1.Text = "Progress"
Me.progressBar1.Anchor = (AnchorStyles.Right Or (AnchorStyles.Left Or AnchorStyles.Top))
Me.progressBar1.Location = New System.Drawing.Point(12, 36)
Me.progressBar1.Name = "progressBar1"
Me.progressBar1.Size = New System.Drawing.Size(436, 18)
Me.progressBar1.Step = 1
Me.progressBar1.TabIndex = 7
MyBase.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
MyBase.AutoScaleMode = AutoScaleMode.Font
MyBase.ClientSize = New System.Drawing.Size(460, 80)
MyBase.Controls.Add(Me.label1)
MyBase.Controls.Add(Me.progressBar1)
MyBase.Name = "QuickUnzipForm"
Me.Text = "QuickUnzip"
AddHandler MyBase.Load, New EventHandler(AddressOf Me.QuickUnzipForm_Load)
AddHandler MyBase.Shown, New EventHandler(AddressOf Me.QuickUnzipForm_Shown)
MyBase.ResumeLayout(False)
MyBase.PerformLayout
End Sub
Public Sub OnTimerEvent(ByVal source As Object, ByVal e As EventArgs)
MyBase.Close
End Sub
Private Sub QuickUnzipForm_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.FixTitle
End Sub
Private Sub QuickUnzipForm_Shown(ByVal sender As Object, ByVal e As EventArgs)
'' For info on running long-running tasks in response to button clicks,
'' in VB.NET WinForms, see
'' http://msdn.microsoft.com/en-us/library/ms951089.aspx
Dim args(2) As String
args(0) = Me.zipfileName
args(1) = Me.extractDirectory
Dim worker As System.Threading.Thread
worker = New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf UnzipFile))
worker.Start(args)
End Sub
Private Sub UnzipFile(ByVal args As String())
Try
Using zip As ZipFile = ZipFile.Read(args(0))
Me.progressBar1.Maximum = zip.Entries.Count
Dim entry As ZipEntry
For Each entry In zip
UpdateUi(entry.FileName)
entry.Extract(args(1), ExtractExistingFileAction.OverwriteSilently)
'' Sleep a little because it's really fast
System.Threading.Thread.Sleep(20)
Next
UpdateUi(String.Format("Finished unzipping {0} entries", zip.Entries.Count))
End Using
Catch ex1 As Exception
Me.label1.Text = ("Exception: " & ex1.ToString)
End Try
'' close the form 1000 ms after the unzip completes.
Dim timer1 As New System.Timers.Timer(1000)
timer1.Enabled = True
timer1.AutoReset = False
AddHandler timer1.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf Me.OnTimerEvent)
End Sub
Private Sub UpdateUi(ByVal filename As String)
If Me.InvokeRequired Then
'' invoke on the proper thread
Me.Invoke(New Action(Of String)(AddressOf UpdateUi), New Object() { filename })
Else
Me.label1.Text = filename
Me.progressBar1.PerformStep
MyBase.Update
End If
End Sub
' Fields
Private extractDirectory As String
Private zipfileName As String
Private components As System.ComponentModel.IContainer
Private label1 As Label
Private progressBar1 As ProgressBar
End Class
End Namespace
@@ -0,0 +1,26 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WinForms-ZipUp", "WinForms-ZipUp\WinForms-ZipUp.vbproj", "{58EB3655-40F3-44FC-804E-47A8103DBF99}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WinForms-Unzip", "WinForms-Unzip\WinForms-Unzip.vbproj", "{9E4C484D-656E-4E19-8741-5701D027AA51}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{58EB3655-40F3-44FC-804E-47A8103DBF99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58EB3655-40F3-44FC-804E-47A8103DBF99}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58EB3655-40F3-44FC-804E-47A8103DBF99}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58EB3655-40F3-44FC-804E-47A8103DBF99}.Release|Any CPU.Build.0 = Release|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9E4C484D-656E-4E19-8741-5701D027AA51}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
@@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.3074
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.WinForms_Unzip.Form1
End Sub
End Class
End Namespace
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>0</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>
@@ -0,0 +1,62 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.3074
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'<summary>
' A strongly-typed resource class, for looking up localized strings, etc.
'</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'<summary>
' Returns the cached ResourceManager instance used by this class.
'</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WinForms_Unzip.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'<summary>
' Overrides the current thread's CurrentUICulture property for all
' resource lookups using this strongly typed resource class.
'</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set(ByVal value As Global.System.Globalization.CultureInfo)
resourceCulture = value
End Set
End Property
End Module
End Namespace
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.3074
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.WinForms_Unzip.My.MySettings
Get
Return Global.WinForms_Unzip.My.MySettings.Default
End Get
End Property
End Module
End Namespace
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
@@ -0,0 +1,170 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.tbZipToOpen = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.btnZipBrowse = New System.Windows.Forms.Button
Me.ProgressBar1 = New System.Windows.Forms.ProgressBar
Me.btnUnzip = New System.Windows.Forms.Button
Me.lblStatus = New System.Windows.Forms.Label
Me.tbExtractDir = New System.Windows.Forms.TextBox
Me.Label2 = New System.Windows.Forms.Label
Me.btnExtractDirBrowse = New System.Windows.Forms.Button
Me.btnCancel = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'tbZipToOpen
'
Me.tbZipToOpen.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.tbZipToOpen.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest
Me.tbZipToOpen.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem
Me.tbZipToOpen.Location = New System.Drawing.Point(15, 23)
Me.tbZipToOpen.Name = "tbZipToOpen"
Me.tbZipToOpen.Size = New System.Drawing.Size(389, 20)
Me.tbZipToOpen.TabIndex = 5
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(12, 6)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(62, 13)
Me.Label1.TabIndex = 1
Me.Label1.Text = "Unzip a file:"
'
'btnZipBrowse
'
Me.btnZipBrowse.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnZipBrowse.Location = New System.Drawing.Point(410, 22)
Me.btnZipBrowse.Name = "btnZipBrowse"
Me.btnZipBrowse.Size = New System.Drawing.Size(30, 23)
Me.btnZipBrowse.TabIndex = 7
Me.btnZipBrowse.Text = "..."
Me.btnZipBrowse.UseVisualStyleBackColor = True
'
'ProgressBar1
'
Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ProgressBar1.Location = New System.Drawing.Point(12, 133)
Me.ProgressBar1.Name = "ProgressBar1"
Me.ProgressBar1.Size = New System.Drawing.Size(428, 15)
Me.ProgressBar1.TabIndex = 3
'
'btnUnzip
'
Me.btnUnzip.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnUnzip.Location = New System.Drawing.Point(365, 104)
Me.btnUnzip.Name = "btnUnzip"
Me.btnUnzip.Size = New System.Drawing.Size(75, 23)
Me.btnUnzip.TabIndex = 0
Me.btnUnzip.Text = "Unzip"
Me.btnUnzip.UseVisualStyleBackColor = True
'
'lblStatus
'
Me.lblStatus.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.lblStatus.AutoSize = True
Me.lblStatus.Location = New System.Drawing.Point(12, 179)
Me.lblStatus.Name = "lblStatus"
Me.lblStatus.Size = New System.Drawing.Size(16, 13)
Me.lblStatus.TabIndex = 5
Me.lblStatus.Text = "..."
'
'tbExtractDir
'
Me.tbExtractDir.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.tbExtractDir.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest
Me.tbExtractDir.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories
Me.tbExtractDir.Location = New System.Drawing.Point(15, 68)
Me.tbExtractDir.Name = "tbExtractDir"
Me.tbExtractDir.Size = New System.Drawing.Size(389, 20)
Me.tbExtractDir.TabIndex = 10
'
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Location = New System.Drawing.Point(12, 52)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(66, 13)
Me.Label2.TabIndex = 7
Me.Label2.Text = "To directory:"
'
'btnExtractDirBrowse
'
Me.btnExtractDirBrowse.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnExtractDirBrowse.Location = New System.Drawing.Point(410, 67)
Me.btnExtractDirBrowse.Name = "btnExtractDirBrowse"
Me.btnExtractDirBrowse.Size = New System.Drawing.Size(30, 23)
Me.btnExtractDirBrowse.TabIndex = 12
Me.btnExtractDirBrowse.Text = "..."
Me.btnExtractDirBrowse.UseVisualStyleBackColor = True
'
'btnCancel
'
Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnCancel.Enabled = False
Me.btnCancel.Location = New System.Drawing.Point(365, 154)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 20
Me.btnCancel.TabStop = False
Me.btnCancel.Text = "Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(452, 198)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnExtractDirBrowse)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.tbExtractDir)
Me.Controls.Add(Me.lblStatus)
Me.Controls.Add(Me.btnUnzip)
Me.Controls.Add(Me.ProgressBar1)
Me.Controls.Add(Me.btnZipBrowse)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.tbZipToOpen)
Me.Name = "Form1"
Me.Text = "DotNetZip Simple Unzip"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents tbZipToOpen As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents btnZipBrowse As System.Windows.Forms.Button
Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar
Friend WithEvents btnUnzip As System.Windows.Forms.Button
Friend WithEvents lblStatus As System.Windows.Forms.Label
Friend WithEvents tbExtractDir As System.Windows.Forms.TextBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents btnExtractDirBrowse As System.Windows.Forms.Button
Friend WithEvents btnCancel As System.Windows.Forms.Button
End Class
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,228 @@
Imports System
Imports System.IO
Imports Ionic.Zip
Imports System.ComponentModel
Public Class Form1
Private _backgroundWorker1 As System.ComponentModel.BackgroundWorker
Private _operationCanceled As Boolean
Private nFilesCompleted As Integer
Private totalEntriesToProcess As Integer
Private _appCuKey As Microsoft.Win32.RegistryKey
Private AppRegyPath As String = "Software\Ionic\VBunZip"
Private rvn_ZipFile As String = "zipfile"
Private rvn_ExtractDir As String = "extractdir"
Private Delegate Sub ZipProgress(ByVal e As ExtractProgressEventArgs)
Private Sub btnZipBrowse_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnZipBrowse.Click
Dim openFileDialog1 As New OpenFileDialog
If (String.IsNullOrEmpty(tbZipToOpen.Text)) Then
openFileDialog1.InitialDirectory = "c:\"
Else
openFileDialog1.InitialDirectory = IIf(File.Exists(Me.tbZipToOpen.Text), Path.GetDirectoryName(Me.tbZipToOpen.Text), Me.tbZipToOpen.Text)
End If
openFileDialog1.Filter = "zip files|*.zip|EXE files|*.exe|All Files|*.*"
openFileDialog1.FilterIndex = 1
openFileDialog1.RestoreDirectory = True
If (openFileDialog1.ShowDialog = DialogResult.OK) Then
Me.tbZipToOpen.Text = openFileDialog1.FileName
If File.Exists(Me.tbZipToOpen.Text) Then
Me.btnUnzip_Click(sender, e)
End If
End If
End Sub
Private Sub btnUnzip_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnUnzip.Click
If Not File.Exists(Me.tbZipToOpen.Text) Then
MessageBox.Show("That file does not exist", "Cannot Unzip", MessageBoxButtons.OK)
End If
If Not String.IsNullOrEmpty(tbZipToOpen.Text) And _
Not String.IsNullOrEmpty(tbExtractDir.Text) Then
If Not Directory.Exists(tbExtractDir.Text) Then
Directory.CreateDirectory(tbExtractDir.Text)
End If
nFilesCompleted = 0
_operationCanceled = False
btnCancel.Enabled = True
btnUnzip.Enabled = False
btnZipBrowse.Enabled = False
btnExtractDirBrowse.Enabled = False
tbZipToOpen.Enabled = False
tbExtractDir.Enabled = False
KickoffExtract()
End If
End Sub
Private Sub KickoffExtract()
lblStatus.Text = "Extracting..."
Dim args(2) As String
args(0) = tbZipToOpen.Text
args(1) = tbExtractDir.Text
_backgroundWorker1 = New System.ComponentModel.BackgroundWorker()
_backgroundWorker1.WorkerSupportsCancellation = False
_backgroundWorker1.WorkerReportsProgress = False
AddHandler Me._backgroundWorker1.DoWork, New DoWorkEventHandler(AddressOf Me.UnzipFile)
_backgroundWorker1.RunWorkerAsync(args)
End Sub
Private Sub btnExtractDirBrowse_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnExtractDirBrowse.Click
Dim dlg As New FolderBrowserDialog
dlg.Description = "Select a folder to zip up:"
dlg.ShowNewFolderButton = False
'dlg.ShowEditBox = True
dlg.SelectedPath = Me.tbExtractDir.Text
'dlg.ShowFullPathInEditBox = True
If (dlg.ShowDialog = DialogResult.OK) Then
tbExtractDir.Text = dlg.SelectedPath
End If
End Sub
Private Sub UnzipFile(ByVal sender As Object, ByVal e As DoWorkEventArgs)
Dim extractCancelled As Boolean = False
Dim args() As String = e.Argument
Dim zipToRead As String = args(0)
Dim extractDir As String = args(1)
Try
Using zip As ZipFile = ZipFile.Read(zipToRead)
totalEntriesToProcess = zip.Entries.Count
SetProgressBarMax(zip.Entries.Count)
AddHandler zip.ExtractProgress, New EventHandler(Of ExtractProgressEventArgs)(AddressOf Me.zip_ExtractProgress)
zip.ExtractAll(extractDir, Ionic.Zip.ExtractExistingFileAction.OverwriteSilently)
End Using
Catch ex1 As Exception
MessageBox.Show(String.Format("There's been a problem extracting that zip file. {0}", ex1.Message), "Error Extracting", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
End Try
ResetUI()
End Sub
Private Sub ResetUI()
If btnCancel.InvokeRequired Then
btnCancel.Invoke(New Action(AddressOf ResetUI), New Object() {})
Else
btnUnzip.Enabled = True
btnZipBrowse.Enabled = True
btnExtractDirBrowse.Enabled = True
btnCancel.Enabled = False
tbZipToOpen.Enabled = True
tbExtractDir.Enabled = True
ProgressBar1.Maximum = 1
ProgressBar1.Value = 0
Me.btnUnzip.Focus()
End If
End Sub
Private Sub SetProgressBarMax(ByVal n As Integer)
If ProgressBar1.InvokeRequired Then
ProgressBar1.Invoke(New Action(Of Integer)(AddressOf SetProgressBarMax), New Object() {n})
Else
ProgressBar1.Value = 0
ProgressBar1.Maximum = n
ProgressBar1.Step = 1
End If
End Sub
Private Sub zip_ExtractProgress(ByVal sender As Object, ByVal e As ExtractProgressEventArgs)
If _operationCanceled Then
e.Cancel = True
Return
End If
If (e.EventType = Ionic.Zip.ZipProgressEventType.Extracting_AfterExtractEntry) Then
StepEntryProgress(e)
ElseIf (e.EventType = ZipProgressEventType.Extracting_BeforeExtractAll) Then
'' do nothing
End If
End Sub
Private Sub StepEntryProgress(ByVal e As ExtractProgressEventArgs)
If ProgressBar1.InvokeRequired Then
ProgressBar1.Invoke(New ZipProgress(AddressOf StepEntryProgress), New Object() {e})
Else
ProgressBar1.PerformStep()
System.Threading.Thread.Sleep(100)
'set a label with status information
nFilesCompleted = nFilesCompleted + 1
lblStatus.Text = String.Format("{0} of {1} files...({2})", nFilesCompleted, totalEntriesToProcess, e.CurrentEntry.FileName)
Me.Update()
End If
End Sub
'Private Sub StepArchiveProgress(ByVal e As ZipProgressEventArgs)
' If ProgressBar1.InvokeRequired Then
' ProgressBar1.Invoke(New ZipProgress(AddressOf StepArchiveProgress), New Object() {e})
' ElseIf Not _operationCanceled Then
' _nFilesCompleted = _nFilesCompleted + 1
' ProgressBar1.PerformStep()
' progressBar2.Value = progressBar2.Maximum = 1
' MyBase.Update()
' End If
'End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
_operationCanceled = True
ProgressBar1.Maximum = 1
ProgressBar1.Value = 0
lblStatus.Text = "Cancelled..."
End Sub
Private Sub SaveFormToRegistry()
If AppCuKey IsNot Nothing Then
If Not String.IsNullOrEmpty(tbZipToOpen.Text) Then
AppCuKey.SetValue(rvn_ZipFile, Me.tbZipToOpen.Text)
End If
If Not String.IsNullOrEmpty(tbExtractDir.Text) Then
AppCuKey.SetValue(rvn_ExtractDir, tbExtractDir.Text)
End If
End If
End Sub
Private Sub LoadFormFromRegistry()
If AppCuKey IsNot Nothing Then
Dim s As String
s = AppCuKey.GetValue(rvn_ZipFile)
If Not String.IsNullOrEmpty(s) Then
Me.tbZipToOpen.Text = s
End If
s = AppCuKey.GetValue(rvn_ExtractDir)
If Not String.IsNullOrEmpty(s) Then
tbExtractDir.Text = s
End If
End If
End Sub
Public ReadOnly Property AppCuKey() As Microsoft.Win32.RegistryKey
Get
If (_appCuKey Is Nothing) Then
Me._appCuKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(AppRegyPath, True)
If (Me._appCuKey Is Nothing) Then
Me._appCuKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(AppRegyPath)
End If
End If
Return _appCuKey
End Get
End Property
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
SaveFormToRegistry()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LoadFormFromRegistry()
End Sub
End Class
@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9E4C484D-656E-4E19-8741-5701D027AA51}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>WinForms_Unzip.My.MyApplication</StartupObject>
<RootNamespace>WinForms_Unzip</RootNamespace>
<AssemblyName>WinForms-Unzip</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<OptionExplicit>On</OptionExplicit>
<OptionCompare>Binary</OptionCompare>
<OptionStrict>Off</OptionStrict>
<OptionInfer>On</OptionInfer>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>WinForms-Unzip.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>WinForms-Unzip.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Ionic.Zip">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\Zip\bin\Debug\Ionic.Zip.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="Unzip-Form1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Unzip-Form1.Designer.vb">
<DependentUpon>Unzip-Form1.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Unzip-Form1.resx">
<DependentUpon>Unzip-Form1.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.3074
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.WindowsApplication1.Form1
End Sub
End Class
End Namespace
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>0</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>
@@ -0,0 +1,62 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.3074
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'<summary>
' A strongly-typed resource class, for looking up localized strings, etc.
'</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'<summary>
' Returns the cached ResourceManager instance used by this class.
'</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WindowsApplication1.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'<summary>
' Overrides the current thread's CurrentUICulture property for all
' resource lookups using this strongly typed resource class.
'</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set(ByVal value As Global.System.Globalization.CultureInfo)
resourceCulture = value
End Set
End Property
End Module
End Namespace
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.3074
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.WindowsApplication1.My.MySettings
Get
Return Global.WindowsApplication1.My.MySettings.Default
End Get
End Property
End Module
End Namespace
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{58EB3655-40F3-44FC-804E-47A8103DBF99}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>WindowsApplication1.My.MyApplication</StartupObject>
<RootNamespace>WindowsApplication1</RootNamespace>
<AssemblyName>WindowsApplication1</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<OptionExplicit>On</OptionExplicit>
<OptionCompare>Binary</OptionCompare>
<OptionStrict>Off</OptionStrict>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>WindowsApplication1.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>WindowsApplication1.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<ItemGroup>
<Reference Include="Ionic.Zip, Version=1.7.2.3, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\Zip\bin\Debug\Ionic.Zip.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="ZipUp-Form1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="ZipUp-Form1.Designer.vb">
<DependentUpon>ZipUp-Form1.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ZipUp-Form1.resx">
<DependentUpon>ZipUp-Form1.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Some files were not shown because too many files have changed in this diff Show More