Стартовый пул
This commit is contained in:
		
							
								
								
									
										58
									
								
								unrar/Examples/C#/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								unrar/Examples/C#/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
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("Unrar Tester")]
 | 
			
		||||
[assembly: AssemblyDescription("Unrar DLL Example Project")]
 | 
			
		||||
[assembly: AssemblyConfiguration("")]
 | 
			
		||||
[assembly: AssemblyCompany("Schematrix")]
 | 
			
		||||
[assembly: AssemblyProduct("UnrarTester")]
 | 
			
		||||
[assembly: AssemblyCopyright("")]
 | 
			
		||||
[assembly: AssemblyTrademark("")]
 | 
			
		||||
[assembly: AssemblyCulture("")]		
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers 
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
 | 
			
		||||
[assembly: AssemblyVersion("1.0.*")]
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// In order to sign your assembly you must specify a key to use. Refer to the 
 | 
			
		||||
// Microsoft .NET Framework documentation for more information on assembly signing.
 | 
			
		||||
//
 | 
			
		||||
// Use the attributes below to control which key is used for signing. 
 | 
			
		||||
//
 | 
			
		||||
// Notes: 
 | 
			
		||||
//   (*) If no key is specified, the assembly is not signed.
 | 
			
		||||
//   (*) KeyName refers to a key that has been installed in the Crypto Service
 | 
			
		||||
//       Provider (CSP) on your machine. KeyFile refers to a file which contains
 | 
			
		||||
//       a key.
 | 
			
		||||
//   (*) If the KeyFile and the KeyName values are both specified, the 
 | 
			
		||||
//       following processing occurs:
 | 
			
		||||
//       (1) If the KeyName can be found in the CSP, that key is used.
 | 
			
		||||
//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
 | 
			
		||||
//           in the KeyFile is installed into the CSP and used.
 | 
			
		||||
//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
 | 
			
		||||
//       When specifying the KeyFile, the location of the KeyFile should be
 | 
			
		||||
//       relative to the project output directory which is
 | 
			
		||||
//       %Project Directory%\obj\<configuration>. For example, if your KeyFile is
 | 
			
		||||
//       located in the project directory, you would specify the AssemblyKeyFile 
 | 
			
		||||
//       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
 | 
			
		||||
//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
 | 
			
		||||
//       documentation for more information on this.
 | 
			
		||||
//
 | 
			
		||||
[assembly: AssemblyDelaySign(false)]
 | 
			
		||||
[assembly: AssemblyKeyFile("")]
 | 
			
		||||
[assembly: AssemblyKeyName("")]
 | 
			
		||||
							
								
								
									
										186
									
								
								unrar/Examples/C#/TextInputDialog.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								unrar/Examples/C#/TextInputDialog.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,186 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Drawing;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.ComponentModel;
 | 
			
		||||
using System.Windows.Forms;
 | 
			
		||||
 | 
			
		||||
namespace Schematrix
 | 
			
		||||
{
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// Summary description for TextInputDialog.
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public class TextInputDialog : System.Windows.Forms.Form
 | 
			
		||||
	{
 | 
			
		||||
		private System.Windows.Forms.TextBox InputValue;
 | 
			
		||||
		private System.Windows.Forms.Button OKButton;
 | 
			
		||||
		private System.Windows.Forms.Button ResetButton;
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Required designer variable.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		private System.ComponentModel.Container components = null;
 | 
			
		||||
		private System.Windows.Forms.Button CanxButton;
 | 
			
		||||
		private string defaultValue=string.Empty;
 | 
			
		||||
 | 
			
		||||
		public TextInputDialog()
 | 
			
		||||
		{
 | 
			
		||||
			//
 | 
			
		||||
			// Required for Windows Form Designer support
 | 
			
		||||
			//
 | 
			
		||||
			InitializeComponent();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public string Value
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return(InputValue.Text);
 | 
			
		||||
			}
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				if(value!=InputValue.Text)
 | 
			
		||||
				{
 | 
			
		||||
					InputValue.Text=value;
 | 
			
		||||
					InputValue.SelectionStart=value.Length;
 | 
			
		||||
					InputValue.SelectionLength=0;
 | 
			
		||||
					defaultValue=value;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public string Prompt
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return(this.Text);
 | 
			
		||||
			}
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.Text=value;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public char PasswordChar
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return InputValue.PasswordChar;
 | 
			
		||||
			}
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				InputValue.PasswordChar=value;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public void SelectAll()
 | 
			
		||||
		{
 | 
			
		||||
			InputValue.SelectAll();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Clean up any resources being used.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		protected override void Dispose( bool disposing )
 | 
			
		||||
		{
 | 
			
		||||
			if( disposing )
 | 
			
		||||
			{
 | 
			
		||||
				if(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.InputValue = new System.Windows.Forms.TextBox();
 | 
			
		||||
			this.OKButton = new System.Windows.Forms.Button();
 | 
			
		||||
			this.CanxButton = new System.Windows.Forms.Button();
 | 
			
		||||
			this.ResetButton = new System.Windows.Forms.Button();
 | 
			
		||||
			this.SuspendLayout();
 | 
			
		||||
			// 
 | 
			
		||||
			// InputValue
 | 
			
		||||
			// 
 | 
			
		||||
			this.InputValue.Dock = System.Windows.Forms.DockStyle.Top;
 | 
			
		||||
			this.InputValue.Location = new System.Drawing.Point(0, 0);
 | 
			
		||||
			this.InputValue.Name = "InputValue";
 | 
			
		||||
			this.InputValue.Size = new System.Drawing.Size(304, 20);
 | 
			
		||||
			this.InputValue.TabIndex = 1;
 | 
			
		||||
			this.InputValue.Text = "";
 | 
			
		||||
			// 
 | 
			
		||||
			// OKButton
 | 
			
		||||
			// 
 | 
			
		||||
			this.OKButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
 | 
			
		||||
				| System.Windows.Forms.AnchorStyles.Left)));
 | 
			
		||||
			this.OKButton.DialogResult = System.Windows.Forms.DialogResult.OK;
 | 
			
		||||
			this.OKButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
 | 
			
		||||
			this.OKButton.Location = new System.Drawing.Point(40, 26);
 | 
			
		||||
			this.OKButton.Name = "OKButton";
 | 
			
		||||
			this.OKButton.Size = new System.Drawing.Size(64, 24);
 | 
			
		||||
			this.OKButton.TabIndex = 2;
 | 
			
		||||
			this.OKButton.Text = "OK";
 | 
			
		||||
			// 
 | 
			
		||||
			// CanxButton
 | 
			
		||||
			// 
 | 
			
		||||
			this.CanxButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
 | 
			
		||||
				| System.Windows.Forms.AnchorStyles.Left)));
 | 
			
		||||
			this.CanxButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
 | 
			
		||||
			this.CanxButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
 | 
			
		||||
			this.CanxButton.Location = new System.Drawing.Point(184, 26);
 | 
			
		||||
			this.CanxButton.Name = "CanxButton";
 | 
			
		||||
			this.CanxButton.Size = new System.Drawing.Size(64, 24);
 | 
			
		||||
			this.CanxButton.TabIndex = 3;
 | 
			
		||||
			this.CanxButton.Text = "Cancel";
 | 
			
		||||
			// 
 | 
			
		||||
			// ResetButton
 | 
			
		||||
			// 
 | 
			
		||||
			this.ResetButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
 | 
			
		||||
				| System.Windows.Forms.AnchorStyles.Left)));
 | 
			
		||||
			this.ResetButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
 | 
			
		||||
			this.ResetButton.Location = new System.Drawing.Point(112, 26);
 | 
			
		||||
			this.ResetButton.Name = "ResetButton";
 | 
			
		||||
			this.ResetButton.Size = new System.Drawing.Size(64, 24);
 | 
			
		||||
			this.ResetButton.TabIndex = 4;
 | 
			
		||||
			this.ResetButton.Text = "Reset";
 | 
			
		||||
			this.ResetButton.Click += new System.EventHandler(this.ResetButton_Click);
 | 
			
		||||
			// 
 | 
			
		||||
			// TextInputDialog
 | 
			
		||||
			// 
 | 
			
		||||
			this.AcceptButton = this.OKButton;
 | 
			
		||||
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
 | 
			
		||||
			this.ClientSize = new System.Drawing.Size(304, 54);
 | 
			
		||||
			this.ControlBox = false;
 | 
			
		||||
			this.Controls.Add(this.ResetButton);
 | 
			
		||||
			this.Controls.Add(this.CanxButton);
 | 
			
		||||
			this.Controls.Add(this.OKButton);
 | 
			
		||||
			this.Controls.Add(this.InputValue);
 | 
			
		||||
			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
 | 
			
		||||
			this.KeyPreview = true;
 | 
			
		||||
			this.MaximizeBox = false;
 | 
			
		||||
			this.MinimizeBox = false;
 | 
			
		||||
			this.Name = "TextInputDialog";
 | 
			
		||||
			this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
 | 
			
		||||
			this.Text = "TextInputDialog";
 | 
			
		||||
			this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TextInputDialog_KeyDown);
 | 
			
		||||
			this.ResumeLayout(false);
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		private void ResetButton_Click(object sender, System.EventArgs e)
 | 
			
		||||
		{
 | 
			
		||||
			InputValue.Text=defaultValue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void TextInputDialog_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
 | 
			
		||||
		{
 | 
			
		||||
			if(e.KeyCode==Keys.Escape)
 | 
			
		||||
				this.DialogResult=DialogResult.Cancel;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										166
									
								
								unrar/Examples/C#/TextInputDialog.resx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								unrar/Examples/C#/TextInputDialog.resx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,166 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<root>
 | 
			
		||||
  <!-- 
 | 
			
		||||
    Microsoft ResX Schema 
 | 
			
		||||
    
 | 
			
		||||
    Version 1.3
 | 
			
		||||
    
 | 
			
		||||
    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">1.3</resheader>
 | 
			
		||||
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
 | 
			
		||||
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
 | 
			
		||||
    <data name="Name1">this is my long string</data>
 | 
			
		||||
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
 | 
			
		||||
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
 | 
			
		||||
        [base64 mime encoded serialized .NET Framework object]
 | 
			
		||||
    </data>
 | 
			
		||||
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
 | 
			
		||||
        [base64 mime encoded string representing a byte array form of the .NET Framework object]
 | 
			
		||||
    </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 forserialized 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="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>1.3</value>
 | 
			
		||||
  </resheader>
 | 
			
		||||
  <resheader name="reader">
 | 
			
		||||
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
 | 
			
		||||
  </resheader>
 | 
			
		||||
  <resheader name="writer">
 | 
			
		||||
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
 | 
			
		||||
  </resheader>
 | 
			
		||||
  <data name="InputValue.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="InputValue.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="InputValue.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="OKButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="OKButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="OKButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="CanxButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="CanxButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="CanxButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="ResetButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="ResetButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="ResetButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>(Default)</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
 | 
			
		||||
    <value>2, 2</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>True</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>80</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>True</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.Name">
 | 
			
		||||
    <value>TextInputDialog</value>
 | 
			
		||||
  </data>
 | 
			
		||||
</root>
 | 
			
		||||
							
								
								
									
										969
									
								
								unrar/Examples/C#/Unrar.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										969
									
								
								unrar/Examples/C#/Unrar.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,969 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  Author:  Michael A. McCloskey
 | 
			
		||||
 *  Company: Schematrix
 | 
			
		||||
 *  Version: 20040714
 | 
			
		||||
 *  
 | 
			
		||||
 *  Personal Comments:
 | 
			
		||||
 *  I created this unrar wrapper class for personal use 
 | 
			
		||||
 *  after running into a number of issues trying to use
 | 
			
		||||
 *  another COM unrar product via COM interop.  I hope it 
 | 
			
		||||
 *  proves as useful to you as it has to me and saves you
 | 
			
		||||
 *  some time in building your own products.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Schematrix
 | 
			
		||||
{
 | 
			
		||||
	#region Event Delegate Definitions
 | 
			
		||||
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// Represents the method that will handle data available events
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public delegate void DataAvailableHandler(object sender, DataAvailableEventArgs e);
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// Represents the method that will handle extraction progress events
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public delegate void ExtractionProgressHandler(object sender, ExtractionProgressEventArgs e);
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// Represents the method that will handle missing archive volume events
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public delegate void MissingVolumeHandler(object sender, MissingVolumeEventArgs e);
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// Represents the method that will handle new volume events
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public delegate void NewVolumeHandler(object sender, NewVolumeEventArgs e);
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// Represents the method that will handle new file notifications
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public delegate void NewFileHandler(object sender, NewFileEventArgs e);
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// Represents the method that will handle password required events
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public delegate void PasswordRequiredHandler(object sender, PasswordRequiredEventArgs e);
 | 
			
		||||
 | 
			
		||||
	#endregion
 | 
			
		||||
	
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// Wrapper class for unrar DLL supplied by RARSoft.  
 | 
			
		||||
	/// Calls unrar DLL via platform invocation services (pinvoke).
 | 
			
		||||
	/// DLL is available at http://www.rarlab.com/rar/UnRARDLL.exe
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public class Unrar : IDisposable
 | 
			
		||||
	{
 | 
			
		||||
		#region Unrar DLL enumerations
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Mode in which archive is to be opened for processing.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public enum OpenMode
 | 
			
		||||
		{
 | 
			
		||||
			/// <summary>
 | 
			
		||||
			/// Open archive for listing contents only
 | 
			
		||||
			/// </summary>
 | 
			
		||||
			List=0,
 | 
			
		||||
			/// <summary>
 | 
			
		||||
			/// Open archive for testing or extracting contents
 | 
			
		||||
			/// </summary>
 | 
			
		||||
			Extract=1
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		private enum RarError : uint
 | 
			
		||||
		{
 | 
			
		||||
			EndOfArchive=10,
 | 
			
		||||
			InsufficientMemory=11,
 | 
			
		||||
			BadData=12,
 | 
			
		||||
			BadArchive=13,
 | 
			
		||||
			UnknownFormat=14,
 | 
			
		||||
			OpenError=15,
 | 
			
		||||
			CreateError=16,
 | 
			
		||||
			CloseError=17,
 | 
			
		||||
			ReadError=18,
 | 
			
		||||
			WriteError=19,
 | 
			
		||||
			BufferTooSmall=20,
 | 
			
		||||
			UnknownError=21
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private enum Operation : uint
 | 
			
		||||
		{
 | 
			
		||||
			Skip=0,
 | 
			
		||||
			Test=1,
 | 
			
		||||
			Extract=2
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private enum VolumeMessage : uint
 | 
			
		||||
		{
 | 
			
		||||
			Ask=0,
 | 
			
		||||
			Notify=1
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[Flags]
 | 
			
		||||
			private enum  ArchiveFlags : uint
 | 
			
		||||
		{
 | 
			
		||||
			Volume=0x1,										// Volume attribute (archive volume)
 | 
			
		||||
			CommentPresent=0x2,						// Archive comment present
 | 
			
		||||
			Lock=0x4,											// Archive lock attribute
 | 
			
		||||
			SolidArchive=0x8,							// Solid attribute (solid archive)
 | 
			
		||||
			NewNamingScheme=0x10,					// New volume naming scheme ('volname.partN.rar')
 | 
			
		||||
			AuthenticityPresent=0x20,			// Authenticity information present
 | 
			
		||||
			RecoveryRecordPresent=0x40,		// Recovery record present
 | 
			
		||||
			EncryptedHeaders=0x80,				// Block headers are encrypted
 | 
			
		||||
			FirstVolume=0x100							// 0x0100  - First volume (set only by RAR 3.0 and later)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private enum CallbackMessages : uint
 | 
			
		||||
		{
 | 
			
		||||
			VolumeChange=0,
 | 
			
		||||
			ProcessData=1,
 | 
			
		||||
			NeedPassword=2
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Unrar DLL structure definitions
 | 
			
		||||
 | 
			
		||||
		[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
 | 
			
		||||
			private struct RARHeaderData
 | 
			
		||||
		{
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
 | 
			
		||||
			public string ArcName;
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
 | 
			
		||||
			public string FileName;
 | 
			
		||||
			public uint Flags;
 | 
			
		||||
			public uint PackSize;
 | 
			
		||||
			public uint UnpSize;
 | 
			
		||||
			public uint HostOS;
 | 
			
		||||
			public uint FileCRC;
 | 
			
		||||
			public uint FileTime;
 | 
			
		||||
			public uint UnpVer;
 | 
			
		||||
			public uint Method;
 | 
			
		||||
			public uint FileAttr;
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPStr)]
 | 
			
		||||
			public string CmtBuf;
 | 
			
		||||
			public uint CmtBufSize;
 | 
			
		||||
			public uint CmtSize;
 | 
			
		||||
			public uint CmtState;
 | 
			
		||||
 | 
			
		||||
			public void Initialize()
 | 
			
		||||
			{
 | 
			
		||||
				this.CmtBuf=new string((char)0, 65536);
 | 
			
		||||
				this.CmtBufSize=65536;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
 | 
			
		||||
			public struct RARHeaderDataEx
 | 
			
		||||
		{
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst=512)]
 | 
			
		||||
			public string ArcName;
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst=1024)]
 | 
			
		||||
			public string ArcNameW;
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst=512)]
 | 
			
		||||
			public string FileName;
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst=1024)]
 | 
			
		||||
			public string FileNameW;
 | 
			
		||||
			public uint Flags;
 | 
			
		||||
			public uint PackSize;
 | 
			
		||||
			public uint PackSizeHigh;
 | 
			
		||||
			public uint UnpSize;
 | 
			
		||||
			public uint UnpSizeHigh;
 | 
			
		||||
			public uint HostOS;
 | 
			
		||||
			public uint FileCRC;
 | 
			
		||||
			public uint FileTime;
 | 
			
		||||
			public uint UnpVer;
 | 
			
		||||
			public uint Method;
 | 
			
		||||
			public uint FileAttr;
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPStr)]
 | 
			
		||||
			public string CmtBuf;
 | 
			
		||||
			public uint CmtBufSize;
 | 
			
		||||
			public uint CmtSize;
 | 
			
		||||
			public uint CmtState;
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValArray, SizeConst=1024)]
 | 
			
		||||
			public uint[] Reserved;
 | 
			
		||||
 | 
			
		||||
			public void Initialize()
 | 
			
		||||
			{
 | 
			
		||||
				this.CmtBuf=new string((char)0, 65536);
 | 
			
		||||
				this.CmtBufSize=65536;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
 | 
			
		||||
			public struct RAROpenArchiveData
 | 
			
		||||
		{
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
 | 
			
		||||
			public string ArcName;
 | 
			
		||||
			public uint OpenMode;
 | 
			
		||||
			public uint OpenResult;
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPStr)]
 | 
			
		||||
			public string CmtBuf;
 | 
			
		||||
			public uint CmtBufSize;
 | 
			
		||||
			public uint CmtSize;
 | 
			
		||||
			public uint CmtState;
 | 
			
		||||
 | 
			
		||||
			public void Initialize()
 | 
			
		||||
			{
 | 
			
		||||
				this.CmtBuf=new string((char)0,65536);
 | 
			
		||||
				this.CmtBufSize=65536;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[StructLayout(LayoutKind.Sequential)]
 | 
			
		||||
			public struct RAROpenArchiveDataEx
 | 
			
		||||
		{
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPStr)]
 | 
			
		||||
			public string ArcName;
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPWStr)]
 | 
			
		||||
			public string ArcNameW;
 | 
			
		||||
			public uint OpenMode;
 | 
			
		||||
			public uint OpenResult;
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPStr)]
 | 
			
		||||
			public string CmtBuf;
 | 
			
		||||
			public uint CmtBufSize;
 | 
			
		||||
			public uint CmtSize;
 | 
			
		||||
			public uint CmtState;
 | 
			
		||||
			public uint Flags;
 | 
			
		||||
			[MarshalAs(UnmanagedType.ByValArray, SizeConst=32)]
 | 
			
		||||
			public uint[] Reserved;
 | 
			
		||||
 | 
			
		||||
			public void Initialize()
 | 
			
		||||
			{
 | 
			
		||||
				this.CmtBuf=new string((char)0,65536);
 | 
			
		||||
				this.CmtBufSize=65536;
 | 
			
		||||
				this.Reserved=new uint[32];
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Unrar function declarations
 | 
			
		||||
 | 
			
		||||
		[DllImport("unrar.dll")]
 | 
			
		||||
		private static extern IntPtr RAROpenArchive(ref RAROpenArchiveData archiveData);
 | 
			
		||||
 | 
			
		||||
		[DllImport("UNRAR.DLL")]
 | 
			
		||||
		private static extern IntPtr RAROpenArchiveEx(ref RAROpenArchiveDataEx archiveData);
 | 
			
		||||
 | 
			
		||||
		[DllImport("unrar.dll")]
 | 
			
		||||
		private static extern int RARCloseArchive(IntPtr hArcData);
 | 
			
		||||
 | 
			
		||||
		[DllImport("unrar.dll")]
 | 
			
		||||
		private static extern int RARReadHeader(IntPtr hArcData, ref RARHeaderData headerData);
 | 
			
		||||
 | 
			
		||||
		[DllImport("unrar.dll")]
 | 
			
		||||
		private static extern int RARReadHeaderEx(IntPtr hArcData, ref RARHeaderDataEx headerData);
 | 
			
		||||
 | 
			
		||||
		[DllImport("unrar.dll")]
 | 
			
		||||
		private static extern int RARProcessFile(IntPtr hArcData, int operation,
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPStr)] string destPath, 
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPStr)] string destName );
 | 
			
		||||
 | 
			
		||||
		[DllImport("unrar.dll")]
 | 
			
		||||
		private static extern void RARSetCallback(IntPtr hArcData, UNRARCallback callback, int userData);
 | 
			
		||||
 | 
			
		||||
		[DllImport("unrar.dll")]
 | 
			
		||||
		private static extern void RARSetPassword(IntPtr hArcData,
 | 
			
		||||
			[MarshalAs(UnmanagedType.LPStr)] string password);
 | 
			
		||||
 | 
			
		||||
		// Unrar callback delegate signature
 | 
			
		||||
		private delegate int UNRARCallback(uint msg, int UserData, IntPtr p1, int p2);
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Public event declarations
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Event that is raised when a new chunk of data has been extracted
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public event DataAvailableHandler DataAvailable;
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Event that is raised to indicate extraction progress
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public event ExtractionProgressHandler ExtractionProgress;
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Event that is raised when a required archive volume is missing
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public event MissingVolumeHandler MissingVolume;
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Event that is raised when a new file is encountered during processing
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public event NewFileHandler NewFile;
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Event that is raised when a new archive volume is opened for processing
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public event NewVolumeHandler NewVolume;
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Event that is raised when a password is required before continuing
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public event PasswordRequiredHandler PasswordRequired;
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Private fields
 | 
			
		||||
 | 
			
		||||
		private string archivePathName=string.Empty;
 | 
			
		||||
		private IntPtr archiveHandle=new IntPtr(0);
 | 
			
		||||
		private bool retrieveComment=true;
 | 
			
		||||
		private string password=string.Empty;
 | 
			
		||||
		private string comment=string.Empty;
 | 
			
		||||
		private ArchiveFlags archiveFlags=0;
 | 
			
		||||
		private RARHeaderDataEx header=new RARHeaderDataEx();
 | 
			
		||||
		private string destinationPath=string.Empty;
 | 
			
		||||
		private RARFileInfo currentFile=null;
 | 
			
		||||
		private UNRARCallback callback=null;
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Object lifetime procedures
 | 
			
		||||
 | 
			
		||||
		public Unrar() 
 | 
			
		||||
		{
 | 
			
		||||
			this.callback=new UNRARCallback(RARCallback);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public Unrar(string archivePathName) : this()
 | 
			
		||||
		{
 | 
			
		||||
			this.archivePathName=archivePathName;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		~Unrar()
 | 
			
		||||
		{
 | 
			
		||||
			if(this.archiveHandle!=IntPtr.Zero)
 | 
			
		||||
			{
 | 
			
		||||
				Unrar.RARCloseArchive(this.archiveHandle);
 | 
			
		||||
				this.archiveHandle=IntPtr.Zero;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public void Dispose()
 | 
			
		||||
		{
 | 
			
		||||
			if(this.archiveHandle!=IntPtr.Zero)
 | 
			
		||||
			{
 | 
			
		||||
				Unrar.RARCloseArchive(this.archiveHandle);
 | 
			
		||||
				this.archiveHandle=IntPtr.Zero;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Public Properties
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Path and name of RAR archive to open
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string ArchivePathName
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return this.archivePathName;
 | 
			
		||||
			}
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.archivePathName=value;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Archive comment 
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Comment
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return(this.comment);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Current file being processed
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public RARFileInfo CurrentFile
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return(this.currentFile);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Default destination path for extraction
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string DestinationPath
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return this.destinationPath;
 | 
			
		||||
			}
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.destinationPath=value;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Password for opening encrypted archive
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Password
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return(this.password);
 | 
			
		||||
			}
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.password=value;
 | 
			
		||||
				if(this.archiveHandle!=IntPtr.Zero)
 | 
			
		||||
					RARSetPassword(this.archiveHandle, value);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Public Methods
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Close the currently open archive
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public void Close()
 | 
			
		||||
		{
 | 
			
		||||
			// Exit without exception if no archive is open
 | 
			
		||||
			if(this.archiveHandle==IntPtr.Zero)
 | 
			
		||||
				return;
 | 
			
		||||
 | 
			
		||||
			// Close archive
 | 
			
		||||
			int result=Unrar.RARCloseArchive(this.archiveHandle);
 | 
			
		||||
 | 
			
		||||
			// Check result
 | 
			
		||||
			if(result!=0)
 | 
			
		||||
			{
 | 
			
		||||
				ProcessFileError(result);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				this.archiveHandle=IntPtr.Zero;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Opens archive specified by the ArchivePathName property for testing or extraction
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public void Open()
 | 
			
		||||
		{
 | 
			
		||||
			if(this.ArchivePathName.Length==0)
 | 
			
		||||
				throw new IOException("Archive name has not been set.");
 | 
			
		||||
			this.Open(this.ArchivePathName, OpenMode.Extract);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Opens archive specified by the ArchivePathName property with a specified mode
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="openMode">Mode in which archive should be opened</param>
 | 
			
		||||
		public void Open(OpenMode openMode)
 | 
			
		||||
		{
 | 
			
		||||
			if(this.ArchivePathName.Length==0)
 | 
			
		||||
				throw new IOException("Archive name has not been set.");
 | 
			
		||||
			this.Open(this.ArchivePathName, openMode);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Opens specified archive using the specified mode.  
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="archivePathName">Path of archive to open</param>
 | 
			
		||||
		/// <param name="openMode">Mode in which to open archive</param>
 | 
			
		||||
		public void Open(string archivePathName, OpenMode openMode)
 | 
			
		||||
		{
 | 
			
		||||
			IntPtr handle=IntPtr.Zero;
 | 
			
		||||
 | 
			
		||||
			// Close any previously open archives
 | 
			
		||||
			if(this.archiveHandle!=IntPtr.Zero)
 | 
			
		||||
				this.Close();
 | 
			
		||||
 | 
			
		||||
			// Prepare extended open archive struct
 | 
			
		||||
			this.ArchivePathName=archivePathName;
 | 
			
		||||
			RAROpenArchiveDataEx openStruct=new RAROpenArchiveDataEx();
 | 
			
		||||
			openStruct.Initialize();
 | 
			
		||||
			openStruct.ArcName=this.archivePathName+"\0";
 | 
			
		||||
			openStruct.ArcNameW=this.archivePathName+"\0";
 | 
			
		||||
			openStruct.OpenMode=(uint)openMode;
 | 
			
		||||
			if(this.retrieveComment)
 | 
			
		||||
			{
 | 
			
		||||
				openStruct.CmtBuf=new string((char)0,65536);
 | 
			
		||||
				openStruct.CmtBufSize=65536;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				openStruct.CmtBuf=null;
 | 
			
		||||
				openStruct.CmtBufSize=0;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Open archive
 | 
			
		||||
			handle=Unrar.RAROpenArchiveEx(ref openStruct);
 | 
			
		||||
 | 
			
		||||
			// Check for success
 | 
			
		||||
			if(openStruct.OpenResult!=0)
 | 
			
		||||
			{
 | 
			
		||||
				switch((RarError)openStruct.OpenResult)
 | 
			
		||||
				{
 | 
			
		||||
					case RarError.InsufficientMemory:
 | 
			
		||||
						throw new OutOfMemoryException("Insufficient memory to perform operation.");
 | 
			
		||||
 | 
			
		||||
					case RarError.BadData:
 | 
			
		||||
						throw new IOException("Archive header broken");
 | 
			
		||||
 | 
			
		||||
					case RarError.BadArchive:
 | 
			
		||||
						throw new IOException("File is not a valid archive.");
 | 
			
		||||
 | 
			
		||||
					case RarError.OpenError:
 | 
			
		||||
						throw new IOException("File could not be opened.");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Save handle and flags
 | 
			
		||||
			this.archiveHandle=handle;
 | 
			
		||||
			this.archiveFlags=(ArchiveFlags)openStruct.Flags;
 | 
			
		||||
 | 
			
		||||
			// Set callback
 | 
			
		||||
			Unrar.RARSetCallback(this.archiveHandle, this.callback, this.GetHashCode());
 | 
			
		||||
 | 
			
		||||
			// If comment retrieved, save it
 | 
			
		||||
			if(openStruct.CmtState==1)
 | 
			
		||||
				this.comment=openStruct.CmtBuf.ToString();
 | 
			
		||||
 | 
			
		||||
			// If password supplied, set it
 | 
			
		||||
			if(this.password.Length!=0)
 | 
			
		||||
				Unrar.RARSetPassword(this.archiveHandle, this.password);
 | 
			
		||||
 | 
			
		||||
			// Fire NewVolume event for first volume
 | 
			
		||||
			this.OnNewVolume(this.archivePathName);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Reads the next archive header and populates CurrentFile property data
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public bool ReadHeader()
 | 
			
		||||
		{
 | 
			
		||||
			// Throw exception if archive not open
 | 
			
		||||
			if(this.archiveHandle==IntPtr.Zero)
 | 
			
		||||
				throw new IOException("Archive is not open.");
 | 
			
		||||
 | 
			
		||||
			// Initialize header struct
 | 
			
		||||
			this.header=new RARHeaderDataEx();
 | 
			
		||||
			header.Initialize();
 | 
			
		||||
 | 
			
		||||
			// Read next entry
 | 
			
		||||
			currentFile=null;
 | 
			
		||||
			int result=Unrar.RARReadHeaderEx(this.archiveHandle, ref this.header);
 | 
			
		||||
 | 
			
		||||
			// Check for error or end of archive
 | 
			
		||||
			if((RarError)result==RarError.EndOfArchive)
 | 
			
		||||
				return false;
 | 
			
		||||
			else if((RarError)result==RarError.BadData)
 | 
			
		||||
				throw new IOException("Archive data is corrupt.");
 | 
			
		||||
 | 
			
		||||
			// Determine if new file
 | 
			
		||||
			if(((header.Flags & 0x01) != 0) && currentFile!=null)
 | 
			
		||||
				currentFile.ContinuedFromPrevious=true;
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				// New file, prepare header
 | 
			
		||||
				currentFile=new RARFileInfo();
 | 
			
		||||
				currentFile.FileName=header.FileNameW.ToString();
 | 
			
		||||
				if((header.Flags & 0x02) != 0)
 | 
			
		||||
					currentFile.ContinuedOnNext=true;
 | 
			
		||||
				if(header.PackSizeHigh != 0)
 | 
			
		||||
					currentFile.PackedSize=(header.PackSizeHigh * 0x100000000) + header.PackSize;
 | 
			
		||||
				else
 | 
			
		||||
					currentFile.PackedSize=header.PackSize;
 | 
			
		||||
				if(header.UnpSizeHigh != 0)
 | 
			
		||||
					currentFile.UnpackedSize=(header.UnpSizeHigh * 0x100000000) + header.UnpSize;
 | 
			
		||||
				else
 | 
			
		||||
					currentFile.UnpackedSize=header.UnpSize;
 | 
			
		||||
				currentFile.HostOS=(int)header.HostOS;
 | 
			
		||||
				currentFile.FileCRC=header.FileCRC;
 | 
			
		||||
				currentFile.FileTime=FromMSDOSTime(header.FileTime);
 | 
			
		||||
				currentFile.VersionToUnpack=(int)header.UnpVer;
 | 
			
		||||
				currentFile.Method=(int)header.Method;
 | 
			
		||||
				currentFile.FileAttributes=(int)header.FileAttr;
 | 
			
		||||
				currentFile.BytesExtracted=0;
 | 
			
		||||
				if((header.Flags & 0x20) == 0x20)
 | 
			
		||||
					currentFile.IsDirectory=true;
 | 
			
		||||
				this.OnNewFile();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Return success
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Returns array of file names contained in archive
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public string[] ListFiles()
 | 
			
		||||
		{
 | 
			
		||||
			ArrayList fileNames=new ArrayList();
 | 
			
		||||
			while(this.ReadHeader())
 | 
			
		||||
			{
 | 
			
		||||
				if(!currentFile.IsDirectory)
 | 
			
		||||
					fileNames.Add(currentFile.FileName);
 | 
			
		||||
				this.Skip();
 | 
			
		||||
			}
 | 
			
		||||
			string[] files=new string[fileNames.Count];
 | 
			
		||||
			fileNames.CopyTo(files);
 | 
			
		||||
			return files;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Moves the current archive position to the next available header
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public void Skip()
 | 
			
		||||
		{
 | 
			
		||||
			int result=Unrar.RARProcessFile(this.archiveHandle, (int)Operation.Skip, string.Empty, string.Empty);
 | 
			
		||||
 | 
			
		||||
			// Check result
 | 
			
		||||
			if(result!=0)
 | 
			
		||||
			{
 | 
			
		||||
				ProcessFileError(result);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Tests the ability to extract the current file without saving extracted data to disk
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public void Test()
 | 
			
		||||
		{
 | 
			
		||||
			int result=Unrar.RARProcessFile(this.archiveHandle, (int)Operation.Test, string.Empty, string.Empty);
 | 
			
		||||
 | 
			
		||||
			// Check result
 | 
			
		||||
			if(result!=0)
 | 
			
		||||
			{
 | 
			
		||||
				ProcessFileError(result);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Extracts the current file to the default destination path
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public void Extract()
 | 
			
		||||
		{
 | 
			
		||||
			this.Extract(this.destinationPath, string.Empty);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Extracts the current file to a specified destination path and filename
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="destinationName">Path and name of extracted file</param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public void Extract(string destinationName)
 | 
			
		||||
		{
 | 
			
		||||
			this.Extract(string.Empty, destinationName);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Extracts the current file to a specified directory without renaming file
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="destinationPath"></param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public void ExtractToDirectory(string destinationPath)
 | 
			
		||||
		{
 | 
			
		||||
			this.Extract(destinationPath, string.Empty);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Private Methods
 | 
			
		||||
 | 
			
		||||
		private void Extract(string destinationPath, string destinationName)
 | 
			
		||||
		{
 | 
			
		||||
			int result=Unrar.RARProcessFile(this.archiveHandle, (int)Operation.Extract, destinationPath, destinationName);
 | 
			
		||||
 | 
			
		||||
			// Check result
 | 
			
		||||
			if(result!=0)
 | 
			
		||||
			{
 | 
			
		||||
				ProcessFileError(result);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private DateTime FromMSDOSTime(uint dosTime)
 | 
			
		||||
		{
 | 
			
		||||
			int day=0;
 | 
			
		||||
			int month=0;
 | 
			
		||||
			int year=0;
 | 
			
		||||
			int second=0;
 | 
			
		||||
			int hour=0;
 | 
			
		||||
			int minute=0;
 | 
			
		||||
			ushort hiWord;
 | 
			
		||||
			ushort loWord;
 | 
			
		||||
			hiWord=(ushort)((dosTime & 0xFFFF0000) >> 16);
 | 
			
		||||
			loWord=(ushort)(dosTime & 0xFFFF);
 | 
			
		||||
			year=((hiWord & 0xFE00) >> 9)+1980;
 | 
			
		||||
			month=(hiWord & 0x01E0) >> 5;
 | 
			
		||||
			day=hiWord & 0x1F;
 | 
			
		||||
			hour=(loWord & 0xF800) >> 11;
 | 
			
		||||
			minute=(loWord & 0x07E0) >> 5;
 | 
			
		||||
			second=(loWord & 0x1F) << 1;
 | 
			
		||||
			return new DateTime(year, month, day, hour, minute, second);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void ProcessFileError(int result)
 | 
			
		||||
		{
 | 
			
		||||
			switch((RarError)result)
 | 
			
		||||
			{
 | 
			
		||||
				case RarError.UnknownFormat:
 | 
			
		||||
					throw new OutOfMemoryException("Unknown archive format.");
 | 
			
		||||
 | 
			
		||||
				case RarError.BadData:
 | 
			
		||||
					throw new IOException("File CRC Error");
 | 
			
		||||
 | 
			
		||||
				case RarError.BadArchive:
 | 
			
		||||
					throw new IOException("File is not a valid archive.");
 | 
			
		||||
 | 
			
		||||
				case RarError.OpenError:
 | 
			
		||||
					throw new IOException("File could not be opened.");
 | 
			
		||||
 | 
			
		||||
				case RarError.CreateError:
 | 
			
		||||
					throw new IOException("File could not be created.");
 | 
			
		||||
 | 
			
		||||
				case RarError.CloseError:
 | 
			
		||||
					throw new IOException("File close error.");
 | 
			
		||||
 | 
			
		||||
				case RarError.ReadError:
 | 
			
		||||
					throw new IOException("File read error.");
 | 
			
		||||
 | 
			
		||||
				case RarError.WriteError:
 | 
			
		||||
					throw new IOException("File write error.");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private int RARCallback(uint msg, int UserData, IntPtr p1, int p2)
 | 
			
		||||
		{
 | 
			
		||||
			string volume=string.Empty;
 | 
			
		||||
			string newVolume=string.Empty;
 | 
			
		||||
			int result=-1;
 | 
			
		||||
 | 
			
		||||
			switch((CallbackMessages)msg)
 | 
			
		||||
			{
 | 
			
		||||
				case CallbackMessages.VolumeChange:
 | 
			
		||||
					volume=Marshal.PtrToStringAnsi(p1);
 | 
			
		||||
					if((VolumeMessage)p2==VolumeMessage.Notify)
 | 
			
		||||
						result=OnNewVolume(volume);
 | 
			
		||||
					else if((VolumeMessage)p2==VolumeMessage.Ask)
 | 
			
		||||
					{
 | 
			
		||||
						newVolume=OnMissingVolume(volume);
 | 
			
		||||
						if(newVolume.Length==0)
 | 
			
		||||
							result=-1;
 | 
			
		||||
						else
 | 
			
		||||
						{
 | 
			
		||||
							if(newVolume!=volume)
 | 
			
		||||
							{
 | 
			
		||||
								for(int i=0; i<newVolume.Length; i++)
 | 
			
		||||
								{
 | 
			
		||||
									Marshal.WriteByte(p1, i, (byte)newVolume[i]);
 | 
			
		||||
								}
 | 
			
		||||
								Marshal.WriteByte(p1, newVolume.Length, (byte)0);
 | 
			
		||||
							}
 | 
			
		||||
							result=1;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
 | 
			
		||||
				case CallbackMessages.ProcessData:
 | 
			
		||||
					result=OnDataAvailable(p1, p2);
 | 
			
		||||
					break;
 | 
			
		||||
 | 
			
		||||
				case CallbackMessages.NeedPassword:
 | 
			
		||||
					result=OnPasswordRequired(p1, p2);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			return result;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region Protected Virtual (Overridable) Methods
 | 
			
		||||
 | 
			
		||||
		protected virtual void OnNewFile()
 | 
			
		||||
		{
 | 
			
		||||
			if(this.NewFile!=null)
 | 
			
		||||
			{
 | 
			
		||||
				NewFileEventArgs e = new NewFileEventArgs(this.currentFile);
 | 
			
		||||
				this.NewFile(this, e);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected virtual int OnPasswordRequired(IntPtr p1, int p2)
 | 
			
		||||
		{
 | 
			
		||||
			int result=-1;
 | 
			
		||||
			if(this.PasswordRequired!=null)
 | 
			
		||||
			{
 | 
			
		||||
				PasswordRequiredEventArgs e=new PasswordRequiredEventArgs();
 | 
			
		||||
				this.PasswordRequired(this, e);
 | 
			
		||||
				if(e.ContinueOperation && e.Password.Length>0)
 | 
			
		||||
				{
 | 
			
		||||
					for(int i=0; (i<e.Password.Length) && (i<p2); i++)
 | 
			
		||||
						Marshal.WriteByte(p1, i, (byte)e.Password[i]);
 | 
			
		||||
					Marshal.WriteByte(p1, e.Password.Length, (byte)0);
 | 
			
		||||
					result=1;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				throw new IOException("Password is required for extraction.");
 | 
			
		||||
			}
 | 
			
		||||
			return result;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected virtual int OnDataAvailable(IntPtr p1, int p2)
 | 
			
		||||
		{
 | 
			
		||||
			int result=1;
 | 
			
		||||
			if(this.currentFile!=null)
 | 
			
		||||
				this.currentFile.BytesExtracted+=p2;
 | 
			
		||||
			if(this.DataAvailable!=null)
 | 
			
		||||
			{
 | 
			
		||||
				byte[] data=new byte[p2];
 | 
			
		||||
				Marshal.Copy(p1, data, 0, p2);
 | 
			
		||||
				DataAvailableEventArgs e=new DataAvailableEventArgs(data);
 | 
			
		||||
				this.DataAvailable(this, e);
 | 
			
		||||
				if(!e.ContinueOperation)
 | 
			
		||||
					result=-1;
 | 
			
		||||
			}
 | 
			
		||||
			if((this.ExtractionProgress!=null) && (this.currentFile!=null))
 | 
			
		||||
			{
 | 
			
		||||
				ExtractionProgressEventArgs e = new ExtractionProgressEventArgs();
 | 
			
		||||
				e.FileName=this.currentFile.FileName;
 | 
			
		||||
				e.FileSize=this.currentFile.UnpackedSize;
 | 
			
		||||
				e.BytesExtracted=this.currentFile.BytesExtracted;
 | 
			
		||||
				e.PercentComplete=this.currentFile.PercentComplete;
 | 
			
		||||
				this.ExtractionProgress(this, e);
 | 
			
		||||
				if(!e.ContinueOperation)
 | 
			
		||||
					result=-1;
 | 
			
		||||
			}
 | 
			
		||||
			return result;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected virtual int OnNewVolume(string volume)
 | 
			
		||||
		{
 | 
			
		||||
			int result=1;
 | 
			
		||||
			if(this.NewVolume!=null)
 | 
			
		||||
			{
 | 
			
		||||
				NewVolumeEventArgs e=new NewVolumeEventArgs(volume);
 | 
			
		||||
				this.NewVolume(this, e);
 | 
			
		||||
				if(!e.ContinueOperation)
 | 
			
		||||
					result=-1;
 | 
			
		||||
			}
 | 
			
		||||
			return result;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected virtual string OnMissingVolume(string volume)
 | 
			
		||||
		{
 | 
			
		||||
			string result=string.Empty;
 | 
			
		||||
			if(this.MissingVolume!=null)
 | 
			
		||||
			{
 | 
			
		||||
				MissingVolumeEventArgs e=new MissingVolumeEventArgs(volume);
 | 
			
		||||
				this.MissingVolume(this, e);
 | 
			
		||||
				if(e.ContinueOperation)
 | 
			
		||||
					result=e.VolumeName;
 | 
			
		||||
			}
 | 
			
		||||
			return result;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		#endregion
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#region Event Argument Classes
 | 
			
		||||
 | 
			
		||||
	public class NewVolumeEventArgs
 | 
			
		||||
	{
 | 
			
		||||
		public string VolumeName;
 | 
			
		||||
		public bool ContinueOperation=true;
 | 
			
		||||
 | 
			
		||||
		public NewVolumeEventArgs(string volumeName)
 | 
			
		||||
		{
 | 
			
		||||
			this.VolumeName=volumeName;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class MissingVolumeEventArgs
 | 
			
		||||
	{
 | 
			
		||||
		public string VolumeName;
 | 
			
		||||
		public bool ContinueOperation=false;
 | 
			
		||||
 | 
			
		||||
		public MissingVolumeEventArgs(string volumeName)
 | 
			
		||||
		{
 | 
			
		||||
			this.VolumeName=volumeName;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class DataAvailableEventArgs
 | 
			
		||||
	{
 | 
			
		||||
		public readonly byte[] Data;
 | 
			
		||||
		public bool ContinueOperation=true;
 | 
			
		||||
 | 
			
		||||
		public DataAvailableEventArgs(byte[] data)
 | 
			
		||||
		{
 | 
			
		||||
			this.Data=data;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class PasswordRequiredEventArgs
 | 
			
		||||
	{
 | 
			
		||||
		public string Password=string.Empty;
 | 
			
		||||
		public bool ContinueOperation=true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class NewFileEventArgs
 | 
			
		||||
	{
 | 
			
		||||
		public RARFileInfo fileInfo;
 | 
			
		||||
		public NewFileEventArgs(RARFileInfo fileInfo)
 | 
			
		||||
		{
 | 
			
		||||
			this.fileInfo=fileInfo;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class ExtractionProgressEventArgs
 | 
			
		||||
	{
 | 
			
		||||
		public string FileName;
 | 
			
		||||
		public long   FileSize;
 | 
			
		||||
		public long   BytesExtracted;
 | 
			
		||||
		public double PercentComplete;
 | 
			
		||||
		public bool ContinueOperation=true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class RARFileInfo
 | 
			
		||||
	{
 | 
			
		||||
		public string FileName;
 | 
			
		||||
		public bool		ContinuedFromPrevious=false;
 | 
			
		||||
		public bool		ContinuedOnNext=false;
 | 
			
		||||
		public bool		IsDirectory=false;
 | 
			
		||||
		public long		PackedSize=0;
 | 
			
		||||
		public long		UnpackedSize=0;
 | 
			
		||||
		public int		HostOS=0;
 | 
			
		||||
		public long		FileCRC=0;
 | 
			
		||||
		public				DateTime FileTime;
 | 
			
		||||
		public int		VersionToUnpack=0;
 | 
			
		||||
		public int		Method=0;
 | 
			
		||||
		public int		FileAttributes=0;
 | 
			
		||||
		public long		BytesExtracted=0;
 | 
			
		||||
 | 
			
		||||
		public double PercentComplete
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				if(this.UnpackedSize!=0)
 | 
			
		||||
					return(((double)this.BytesExtracted/(double)this.UnpackedSize) * (double)100.0);
 | 
			
		||||
				else
 | 
			
		||||
					return (double)0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#endregion
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										130
									
								
								unrar/Examples/C#/Unrar.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								unrar/Examples/C#/Unrar.csproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
			
		||||
<VisualStudioProject>
 | 
			
		||||
    <CSHARP
 | 
			
		||||
        ProjectType = "Local"
 | 
			
		||||
        ProductVersion = "7.10.3077"
 | 
			
		||||
        SchemaVersion = "2.0"
 | 
			
		||||
        ProjectGuid = "{2F343733-20A0-4AD0-88B2-762977614D67}"
 | 
			
		||||
    >
 | 
			
		||||
        <Build>
 | 
			
		||||
            <Settings
 | 
			
		||||
                ApplicationIcon = ""
 | 
			
		||||
                AssemblyKeyContainerName = ""
 | 
			
		||||
                AssemblyName = "Unrar"
 | 
			
		||||
                AssemblyOriginatorKeyFile = ""
 | 
			
		||||
                DefaultClientScript = "JScript"
 | 
			
		||||
                DefaultHTMLPageLayout = "Grid"
 | 
			
		||||
                DefaultTargetSchema = "IE50"
 | 
			
		||||
                DelaySign = "false"
 | 
			
		||||
                OutputType = "WinExe"
 | 
			
		||||
                PreBuildEvent = ""
 | 
			
		||||
                PostBuildEvent = ""
 | 
			
		||||
                RootNamespace = "Schematrix"
 | 
			
		||||
                RunPostBuildEvent = "OnBuildSuccess"
 | 
			
		||||
                StartupObject = ""
 | 
			
		||||
            >
 | 
			
		||||
                <Config
 | 
			
		||||
                    Name = "Debug"
 | 
			
		||||
                    AllowUnsafeBlocks = "false"
 | 
			
		||||
                    BaseAddress = "285212672"
 | 
			
		||||
                    CheckForOverflowUnderflow = "false"
 | 
			
		||||
                    ConfigurationOverrideFile = ""
 | 
			
		||||
                    DefineConstants = "DEBUG;TRACE"
 | 
			
		||||
                    DocumentationFile = ""
 | 
			
		||||
                    DebugSymbols = "true"
 | 
			
		||||
                    FileAlignment = "4096"
 | 
			
		||||
                    IncrementalBuild = "false"
 | 
			
		||||
                    NoStdLib = "false"
 | 
			
		||||
                    NoWarn = ""
 | 
			
		||||
                    Optimize = "false"
 | 
			
		||||
                    OutputPath = "bin\Debug\"
 | 
			
		||||
                    RegisterForComInterop = "false"
 | 
			
		||||
                    RemoveIntegerChecks = "false"
 | 
			
		||||
                    TreatWarningsAsErrors = "false"
 | 
			
		||||
                    WarningLevel = "4"
 | 
			
		||||
                />
 | 
			
		||||
                <Config
 | 
			
		||||
                    Name = "Release"
 | 
			
		||||
                    AllowUnsafeBlocks = "false"
 | 
			
		||||
                    BaseAddress = "285212672"
 | 
			
		||||
                    CheckForOverflowUnderflow = "false"
 | 
			
		||||
                    ConfigurationOverrideFile = ""
 | 
			
		||||
                    DefineConstants = "TRACE"
 | 
			
		||||
                    DocumentationFile = ""
 | 
			
		||||
                    DebugSymbols = "false"
 | 
			
		||||
                    FileAlignment = "4096"
 | 
			
		||||
                    IncrementalBuild = "false"
 | 
			
		||||
                    NoStdLib = "false"
 | 
			
		||||
                    NoWarn = ""
 | 
			
		||||
                    Optimize = "true"
 | 
			
		||||
                    OutputPath = "bin\Release\"
 | 
			
		||||
                    RegisterForComInterop = "false"
 | 
			
		||||
                    RemoveIntegerChecks = "false"
 | 
			
		||||
                    TreatWarningsAsErrors = "false"
 | 
			
		||||
                    WarningLevel = "4"
 | 
			
		||||
                />
 | 
			
		||||
            </Settings>
 | 
			
		||||
            <References>
 | 
			
		||||
                <Reference
 | 
			
		||||
                    Name = "System"
 | 
			
		||||
                    AssemblyName = "System"
 | 
			
		||||
                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll"
 | 
			
		||||
                />
 | 
			
		||||
                <Reference
 | 
			
		||||
                    Name = "System.Data"
 | 
			
		||||
                    AssemblyName = "System.Data"
 | 
			
		||||
                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
 | 
			
		||||
                />
 | 
			
		||||
                <Reference
 | 
			
		||||
                    Name = "System.XML"
 | 
			
		||||
                    AssemblyName = "System.Xml"
 | 
			
		||||
                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
 | 
			
		||||
                />
 | 
			
		||||
                <Reference
 | 
			
		||||
                    Name = "System.Drawing"
 | 
			
		||||
                    AssemblyName = "System.Drawing"
 | 
			
		||||
                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll"
 | 
			
		||||
                />
 | 
			
		||||
                <Reference
 | 
			
		||||
                    Name = "System.Windows.Forms"
 | 
			
		||||
                    AssemblyName = "System.Windows.Forms"
 | 
			
		||||
                    HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Windows.Forms.dll"
 | 
			
		||||
                />
 | 
			
		||||
            </References>
 | 
			
		||||
        </Build>
 | 
			
		||||
        <Files>
 | 
			
		||||
            <Include>
 | 
			
		||||
                <File
 | 
			
		||||
                    RelPath = "AssemblyInfo.cs"
 | 
			
		||||
                    SubType = "Code"
 | 
			
		||||
                    BuildAction = "Compile"
 | 
			
		||||
                />
 | 
			
		||||
                <File
 | 
			
		||||
                    RelPath = "TextInputDialog.cs"
 | 
			
		||||
                    SubType = "Form"
 | 
			
		||||
                    BuildAction = "Compile"
 | 
			
		||||
                />
 | 
			
		||||
                <File
 | 
			
		||||
                    RelPath = "TextInputDialog.resx"
 | 
			
		||||
                    DependentUpon = "TextInputDialog.cs"
 | 
			
		||||
                    BuildAction = "EmbeddedResource"
 | 
			
		||||
                />
 | 
			
		||||
                <File
 | 
			
		||||
                    RelPath = "Unrar.cs"
 | 
			
		||||
                    SubType = "Code"
 | 
			
		||||
                    BuildAction = "Compile"
 | 
			
		||||
                />
 | 
			
		||||
                <File
 | 
			
		||||
                    RelPath = "UnrarTest.cs"
 | 
			
		||||
                    SubType = "Form"
 | 
			
		||||
                    BuildAction = "Compile"
 | 
			
		||||
                />
 | 
			
		||||
                <File
 | 
			
		||||
                    RelPath = "UnrarTest.resx"
 | 
			
		||||
                    DependentUpon = "UnrarTest.cs"
 | 
			
		||||
                    BuildAction = "EmbeddedResource"
 | 
			
		||||
                />
 | 
			
		||||
            </Include>
 | 
			
		||||
        </Files>
 | 
			
		||||
    </CSHARP>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										48
									
								
								unrar/Examples/C#/Unrar.csproj.user
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								unrar/Examples/C#/Unrar.csproj.user
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
<VisualStudioProject>
 | 
			
		||||
    <CSHARP LastOpenVersion = "7.10.3077" >
 | 
			
		||||
        <Build>
 | 
			
		||||
            <Settings ReferencePath = "" >
 | 
			
		||||
                <Config
 | 
			
		||||
                    Name = "Debug"
 | 
			
		||||
                    EnableASPDebugging = "false"
 | 
			
		||||
                    EnableASPXDebugging = "false"
 | 
			
		||||
                    EnableUnmanagedDebugging = "false"
 | 
			
		||||
                    EnableSQLServerDebugging = "false"
 | 
			
		||||
                    RemoteDebugEnabled = "false"
 | 
			
		||||
                    RemoteDebugMachine = ""
 | 
			
		||||
                    StartAction = "Project"
 | 
			
		||||
                    StartArguments = ""
 | 
			
		||||
                    StartPage = ""
 | 
			
		||||
                    StartProgram = ""
 | 
			
		||||
                    StartURL = ""
 | 
			
		||||
                    StartWorkingDirectory = ""
 | 
			
		||||
                    StartWithIE = "true"
 | 
			
		||||
                />
 | 
			
		||||
                <Config
 | 
			
		||||
                    Name = "Release"
 | 
			
		||||
                    EnableASPDebugging = "false"
 | 
			
		||||
                    EnableASPXDebugging = "false"
 | 
			
		||||
                    EnableUnmanagedDebugging = "false"
 | 
			
		||||
                    EnableSQLServerDebugging = "false"
 | 
			
		||||
                    RemoteDebugEnabled = "false"
 | 
			
		||||
                    RemoteDebugMachine = ""
 | 
			
		||||
                    StartAction = "Project"
 | 
			
		||||
                    StartArguments = ""
 | 
			
		||||
                    StartPage = ""
 | 
			
		||||
                    StartProgram = ""
 | 
			
		||||
                    StartURL = ""
 | 
			
		||||
                    StartWorkingDirectory = ""
 | 
			
		||||
                    StartWithIE = "true"
 | 
			
		||||
                />
 | 
			
		||||
            </Settings>
 | 
			
		||||
        </Build>
 | 
			
		||||
        <OtherProjectSettings
 | 
			
		||||
            CopyProjectDestinationFolder = ""
 | 
			
		||||
            CopyProjectUncPath = ""
 | 
			
		||||
            CopyProjectOption = "0"
 | 
			
		||||
            ProjectView = "ProjectFiles"
 | 
			
		||||
            ProjectTrust = "0"
 | 
			
		||||
        />
 | 
			
		||||
    </CSHARP>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								unrar/Examples/C#/Unrar.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								unrar/Examples/C#/Unrar.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 8.00
 | 
			
		||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unrar", "Unrar.csproj", "{2F343733-20A0-4AD0-88B2-762977614D67}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfiguration) = preSolution
 | 
			
		||||
		Debug = Debug
 | 
			
		||||
		Release = Release
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfiguration) = postSolution
 | 
			
		||||
		{2F343733-20A0-4AD0-88B2-762977614D67}.Debug.ActiveCfg = Debug|.NET
 | 
			
		||||
		{2F343733-20A0-4AD0-88B2-762977614D67}.Debug.Build.0 = Debug|.NET
 | 
			
		||||
		{2F343733-20A0-4AD0-88B2-762977614D67}.Release.ActiveCfg = Release|.NET
 | 
			
		||||
		{2F343733-20A0-4AD0-88B2-762977614D67}.Release.Build.0 = Release|.NET
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityGlobals) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityAddIns) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										438
									
								
								unrar/Examples/C#/UnrarTest.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										438
									
								
								unrar/Examples/C#/UnrarTest.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,438 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Drawing;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.ComponentModel;
 | 
			
		||||
using System.Windows.Forms;
 | 
			
		||||
 | 
			
		||||
namespace Schematrix
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Test driver form for unrar class
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class UnrarTest : System.Windows.Forms.Form
 | 
			
		||||
    {
 | 
			
		||||
        private System.Windows.Forms.TextBox rarFileName;
 | 
			
		||||
        private System.Windows.Forms.Button selectFile;
 | 
			
		||||
        private System.Windows.Forms.Label rarFileNameLabel;
 | 
			
		||||
        private System.Windows.Forms.ListView fileList;
 | 
			
		||||
        private System.Windows.Forms.Button testButton;
 | 
			
		||||
        private System.Windows.Forms.StatusBar statusBar;
 | 
			
		||||
        private System.Windows.Forms.Button extractButton;
 | 
			
		||||
        private System.Windows.Forms.ProgressBar progressBar;
 | 
			
		||||
        private System.Windows.Forms.FolderBrowserDialog folderBrowser;
 | 
			
		||||
        private System.Windows.Forms.OpenFileDialog openFile;
 | 
			
		||||
        private System.Windows.Forms.ColumnHeader fileNameColumnHeader;
 | 
			
		||||
        private System.Windows.Forms.ColumnHeader unpackedSizeColumnHeader;
 | 
			
		||||
        private System.Windows.Forms.ColumnHeader packedSizeColumnHeader;
 | 
			
		||||
        private System.Windows.Forms.ColumnHeader fileTimestampColumnHeader;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Required designer variable.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private System.ComponentModel.Container components = null;
 | 
			
		||||
 | 
			
		||||
        private Unrar unrar;
 | 
			
		||||
 | 
			
		||||
        public UnrarTest()
 | 
			
		||||
        {
 | 
			
		||||
            //
 | 
			
		||||
            // Required for Windows Form Designer support
 | 
			
		||||
            //
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Clean up any resources being used.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override void Dispose( bool disposing )
 | 
			
		||||
        {
 | 
			
		||||
            if( disposing )
 | 
			
		||||
            {
 | 
			
		||||
                if(components != null)
 | 
			
		||||
                {
 | 
			
		||||
                    components.Dispose();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            base.Dispose( disposing );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The main entry point for the application.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [STAThread]
 | 
			
		||||
        static void Main()
 | 
			
		||||
        {
 | 
			
		||||
            Application.Run(new UnrarTest());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #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.rarFileName = new System.Windows.Forms.TextBox();
 | 
			
		||||
            this.selectFile = new System.Windows.Forms.Button();
 | 
			
		||||
            this.rarFileNameLabel = new System.Windows.Forms.Label();
 | 
			
		||||
            this.fileList = new System.Windows.Forms.ListView();
 | 
			
		||||
            this.fileNameColumnHeader = new System.Windows.Forms.ColumnHeader();
 | 
			
		||||
            this.unpackedSizeColumnHeader = new System.Windows.Forms.ColumnHeader();
 | 
			
		||||
            this.packedSizeColumnHeader = new System.Windows.Forms.ColumnHeader();
 | 
			
		||||
            this.fileTimestampColumnHeader = new System.Windows.Forms.ColumnHeader();
 | 
			
		||||
            this.testButton = new System.Windows.Forms.Button();
 | 
			
		||||
            this.statusBar = new System.Windows.Forms.StatusBar();
 | 
			
		||||
            this.extractButton = new System.Windows.Forms.Button();
 | 
			
		||||
            this.progressBar = new System.Windows.Forms.ProgressBar();
 | 
			
		||||
            this.folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
 | 
			
		||||
            this.openFile = new System.Windows.Forms.OpenFileDialog();
 | 
			
		||||
            this.SuspendLayout();
 | 
			
		||||
            //
 | 
			
		||||
            // rarFileName
 | 
			
		||||
            //
 | 
			
		||||
            this.rarFileName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
 | 
			
		||||
                | System.Windows.Forms.AnchorStyles.Right)));
 | 
			
		||||
            this.rarFileName.Location = new System.Drawing.Point(6, 26);
 | 
			
		||||
            this.rarFileName.Name = "rarFileName";
 | 
			
		||||
            this.rarFileName.ReadOnly = true;
 | 
			
		||||
            this.rarFileName.Size = new System.Drawing.Size(590, 20);
 | 
			
		||||
            this.rarFileName.TabIndex = 0;
 | 
			
		||||
            this.rarFileName.Text = "";
 | 
			
		||||
            //
 | 
			
		||||
            // selectFile
 | 
			
		||||
            //
 | 
			
		||||
            this.selectFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
 | 
			
		||||
            this.selectFile.FlatStyle = System.Windows.Forms.FlatStyle.System;
 | 
			
		||||
            this.selectFile.Location = new System.Drawing.Point(603, 26);
 | 
			
		||||
            this.selectFile.Name = "selectFile";
 | 
			
		||||
            this.selectFile.Size = new System.Drawing.Size(28, 20);
 | 
			
		||||
            this.selectFile.TabIndex = 1;
 | 
			
		||||
            this.selectFile.Text = "...";
 | 
			
		||||
            this.selectFile.Click += new System.EventHandler(this.selectFile_Click);
 | 
			
		||||
            //
 | 
			
		||||
            // rarFileNameLabel
 | 
			
		||||
            //
 | 
			
		||||
            this.rarFileNameLabel.Location = new System.Drawing.Point(6, 8);
 | 
			
		||||
            this.rarFileNameLabel.Name = "rarFileNameLabel";
 | 
			
		||||
            this.rarFileNameLabel.Size = new System.Drawing.Size(208, 23);
 | 
			
		||||
            this.rarFileNameLabel.TabIndex = 2;
 | 
			
		||||
            this.rarFileNameLabel.Text = "RAR File Name";
 | 
			
		||||
            //
 | 
			
		||||
            // fileList
 | 
			
		||||
            //
 | 
			
		||||
            this.fileList.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.fileList.CheckBoxes = true;
 | 
			
		||||
            this.fileList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
 | 
			
		||||
                                                                                                                                                             this.fileNameColumnHeader,
 | 
			
		||||
                                                                                                                                                             this.unpackedSizeColumnHeader,
 | 
			
		||||
                                                                                                                                                             this.packedSizeColumnHeader,
 | 
			
		||||
                                                                                                                                                             this.fileTimestampColumnHeader});
 | 
			
		||||
            this.fileList.Location = new System.Drawing.Point(6, 52);
 | 
			
		||||
            this.fileList.Name = "fileList";
 | 
			
		||||
            this.fileList.Size = new System.Drawing.Size(626, 304);
 | 
			
		||||
            this.fileList.TabIndex = 3;
 | 
			
		||||
            this.fileList.View = System.Windows.Forms.View.Details;
 | 
			
		||||
            //
 | 
			
		||||
            // fileNameColumnHeader
 | 
			
		||||
            //
 | 
			
		||||
            this.fileNameColumnHeader.Text = "File Name";
 | 
			
		||||
            this.fileNameColumnHeader.Width = 250;
 | 
			
		||||
            //
 | 
			
		||||
            // unpackedSizeColumnHeader
 | 
			
		||||
            //
 | 
			
		||||
            this.unpackedSizeColumnHeader.Text = "Unpacked Size";
 | 
			
		||||
            this.unpackedSizeColumnHeader.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
 | 
			
		||||
            this.unpackedSizeColumnHeader.Width = 100;
 | 
			
		||||
            //
 | 
			
		||||
            // packedSizeColumnHeader
 | 
			
		||||
            //
 | 
			
		||||
            this.packedSizeColumnHeader.Text = "Packed Size";
 | 
			
		||||
            this.packedSizeColumnHeader.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
 | 
			
		||||
            this.packedSizeColumnHeader.Width = 100;
 | 
			
		||||
            //
 | 
			
		||||
            // fileTimestampColumnHeader
 | 
			
		||||
            //
 | 
			
		||||
            this.fileTimestampColumnHeader.Text = "File Timestamp";
 | 
			
		||||
            this.fileTimestampColumnHeader.Width = 150;
 | 
			
		||||
            //
 | 
			
		||||
            // testButton
 | 
			
		||||
            //
 | 
			
		||||
            this.testButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
 | 
			
		||||
            this.testButton.Enabled = false;
 | 
			
		||||
            this.testButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
 | 
			
		||||
            this.testButton.Location = new System.Drawing.Point(12, 364);
 | 
			
		||||
            this.testButton.Name = "testButton";
 | 
			
		||||
            this.testButton.Size = new System.Drawing.Size(66, 26);
 | 
			
		||||
            this.testButton.TabIndex = 4;
 | 
			
		||||
            this.testButton.Text = "Test";
 | 
			
		||||
            this.testButton.Click += new System.EventHandler(this.testButton_Click);
 | 
			
		||||
            //
 | 
			
		||||
            // statusBar
 | 
			
		||||
            //
 | 
			
		||||
            this.statusBar.Location = new System.Drawing.Point(0, 398);
 | 
			
		||||
            this.statusBar.Name = "statusBar";
 | 
			
		||||
            this.statusBar.Size = new System.Drawing.Size(640, 22);
 | 
			
		||||
            this.statusBar.TabIndex = 5;
 | 
			
		||||
            this.statusBar.Text = "Ready";
 | 
			
		||||
            //
 | 
			
		||||
            // extractButton
 | 
			
		||||
            //
 | 
			
		||||
            this.extractButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
 | 
			
		||||
            this.extractButton.Enabled = false;
 | 
			
		||||
            this.extractButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
 | 
			
		||||
            this.extractButton.Location = new System.Drawing.Point(87, 365);
 | 
			
		||||
            this.extractButton.Name = "extractButton";
 | 
			
		||||
            this.extractButton.Size = new System.Drawing.Size(66, 26);
 | 
			
		||||
            this.extractButton.TabIndex = 6;
 | 
			
		||||
            this.extractButton.Text = "Extract";
 | 
			
		||||
            this.extractButton.Click += new System.EventHandler(this.extractButton_Click);
 | 
			
		||||
            //
 | 
			
		||||
            // progressBar
 | 
			
		||||
            //
 | 
			
		||||
            this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
 | 
			
		||||
                | System.Windows.Forms.AnchorStyles.Right)));
 | 
			
		||||
            this.progressBar.Location = new System.Drawing.Point(162, 370);
 | 
			
		||||
            this.progressBar.Name = "progressBar";
 | 
			
		||||
            this.progressBar.Size = new System.Drawing.Size(470, 16);
 | 
			
		||||
            this.progressBar.TabIndex = 7;
 | 
			
		||||
            //
 | 
			
		||||
            // folderBrowser
 | 
			
		||||
            //
 | 
			
		||||
            this.folderBrowser.Description = "Please select a destination folder for the extracted files.";
 | 
			
		||||
            //
 | 
			
		||||
            // openFile
 | 
			
		||||
            //
 | 
			
		||||
            this.openFile.DefaultExt = "rar";
 | 
			
		||||
            this.openFile.Filter = "RAR Files (*.rar)|*.rar|All Files (*.*)|*.*";
 | 
			
		||||
            this.openFile.Title = "Select RAR File";
 | 
			
		||||
            //
 | 
			
		||||
            // UnrarTest
 | 
			
		||||
            //
 | 
			
		||||
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
 | 
			
		||||
            this.ClientSize = new System.Drawing.Size(640, 420);
 | 
			
		||||
            this.Controls.Add(this.progressBar);
 | 
			
		||||
            this.Controls.Add(this.extractButton);
 | 
			
		||||
            this.Controls.Add(this.statusBar);
 | 
			
		||||
            this.Controls.Add(this.testButton);
 | 
			
		||||
            this.Controls.Add(this.fileList);
 | 
			
		||||
            this.Controls.Add(this.selectFile);
 | 
			
		||||
            this.Controls.Add(this.rarFileName);
 | 
			
		||||
            this.Controls.Add(this.rarFileNameLabel);
 | 
			
		||||
            this.Name = "UnrarTest";
 | 
			
		||||
            this.Text = "Unrar Class Tester";
 | 
			
		||||
            this.ResumeLayout(false);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        private void selectFile_Click(object sender, System.EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            if(openFile.ShowDialog()==DialogResult.OK)
 | 
			
		||||
            {
 | 
			
		||||
                rarFileName.Text = openFile.FileName;
 | 
			
		||||
                OpenRarFile(rarFileName.Text);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void OpenRarFile(string fileName)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                this.Cursor=Cursors.WaitCursor;
 | 
			
		||||
                testButton.Enabled=false;
 | 
			
		||||
                extractButton.Enabled=false;
 | 
			
		||||
                fileList.BeginUpdate();
 | 
			
		||||
                fileList.Items.Clear();
 | 
			
		||||
 | 
			
		||||
                // Create new unrar class and open archive for listing files
 | 
			
		||||
                unrar=new Unrar();
 | 
			
		||||
                unrar.Open(fileName, Unrar.OpenMode.List);
 | 
			
		||||
 | 
			
		||||
                // Read each header, skipping directory entries
 | 
			
		||||
                while(unrar.ReadHeader())
 | 
			
		||||
                {
 | 
			
		||||
                    if(!unrar.CurrentFile.IsDirectory)
 | 
			
		||||
                    {
 | 
			
		||||
                        ListViewItem item=new ListViewItem(unrar.CurrentFile.FileName);
 | 
			
		||||
                        item.SubItems.Add(unrar.CurrentFile.UnpackedSize.ToString());
 | 
			
		||||
                        item.SubItems.Add(unrar.CurrentFile.PackedSize.ToString());
 | 
			
		||||
                        item.SubItems.Add(unrar.CurrentFile.FileTime.ToString());
 | 
			
		||||
                        item.Checked=true;
 | 
			
		||||
                        fileList.Items.Add(item);
 | 
			
		||||
                    }
 | 
			
		||||
                    unrar.Skip();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Cleanup and enable buttons if no exception was thrown
 | 
			
		||||
                unrar.Close();
 | 
			
		||||
                this.unrar=null;
 | 
			
		||||
                testButton.Enabled=true;
 | 
			
		||||
                extractButton.Enabled=true;
 | 
			
		||||
            }
 | 
			
		||||
            catch(Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                testButton.Enabled=false;
 | 
			
		||||
                extractButton.Enabled=false;
 | 
			
		||||
                MessageBox.Show(ex.Message);
 | 
			
		||||
            }
 | 
			
		||||
            finally
 | 
			
		||||
            {
 | 
			
		||||
                this.Cursor=Cursors.Default;
 | 
			
		||||
                fileList.EndUpdate();
 | 
			
		||||
                if(this.unrar!=null)
 | 
			
		||||
                    unrar.Close();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Hashtable GetSelectedFiles()
 | 
			
		||||
        {
 | 
			
		||||
            // Build hashtable of selected entries
 | 
			
		||||
            Hashtable ht=new Hashtable(fileList.CheckedItems.Count);
 | 
			
		||||
            foreach(ListViewItem item in fileList.CheckedItems)
 | 
			
		||||
                ht.Add(item.Text, item);
 | 
			
		||||
            return ht;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void testButton_Click(object sender, System.EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            // Get hashtable of selected files
 | 
			
		||||
            Hashtable selectedFiles=GetSelectedFiles();
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                this.Cursor=Cursors.WaitCursor;
 | 
			
		||||
 | 
			
		||||
                // Create new unrar class and attach event handlers for
 | 
			
		||||
                // progress, missing volumes, and password
 | 
			
		||||
                unrar=new Unrar();
 | 
			
		||||
                AttachHandlers(unrar);
 | 
			
		||||
 | 
			
		||||
                // Open archive for extraction
 | 
			
		||||
                unrar.Open(rarFileName.Text, Unrar.OpenMode.Extract);
 | 
			
		||||
 | 
			
		||||
                // Test each file found in hashtable
 | 
			
		||||
                while(unrar.ReadHeader())
 | 
			
		||||
                {
 | 
			
		||||
                    if(selectedFiles.ContainsKey(unrar.CurrentFile.FileName))
 | 
			
		||||
                    {
 | 
			
		||||
                        this.progressBar.Value=0;
 | 
			
		||||
                        unrar.Test();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        unrar.Skip();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch(Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                MessageBox.Show(ex.Message);
 | 
			
		||||
            }
 | 
			
		||||
            finally
 | 
			
		||||
            {
 | 
			
		||||
                this.Cursor=Cursors.Default;
 | 
			
		||||
                this.statusBar.Text = "Ready";
 | 
			
		||||
                this.progressBar.Value=0;
 | 
			
		||||
                if(this.unrar!=null)
 | 
			
		||||
                    unrar.Close();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void extractButton_Click(object sender, System.EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            // Get hashtable of selected files
 | 
			
		||||
            Hashtable selectedFiles=GetSelectedFiles();
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                // Get destination from user
 | 
			
		||||
                string directory=Path.GetDirectoryName(rarFileName.Text);
 | 
			
		||||
                if(Directory.Exists(directory))
 | 
			
		||||
                    folderBrowser.SelectedPath=directory;
 | 
			
		||||
                if(folderBrowser.ShowDialog()==DialogResult.OK)
 | 
			
		||||
                {
 | 
			
		||||
                    this.Cursor=Cursors.WaitCursor;
 | 
			
		||||
 | 
			
		||||
                    // Create new unrar class and attach event handlers for
 | 
			
		||||
                    // progress, missing volumes, and password
 | 
			
		||||
                    unrar=new Unrar();
 | 
			
		||||
                    AttachHandlers(unrar);
 | 
			
		||||
 | 
			
		||||
                    // Set destination path for all files
 | 
			
		||||
                    unrar.DestinationPath=folderBrowser.SelectedPath;
 | 
			
		||||
 | 
			
		||||
                    // Open archive for extraction
 | 
			
		||||
                    unrar.Open(rarFileName.Text, Unrar.OpenMode.Extract);
 | 
			
		||||
 | 
			
		||||
                    // Extract each file found in hashtable
 | 
			
		||||
                    while(unrar.ReadHeader())
 | 
			
		||||
                    {
 | 
			
		||||
                        if(selectedFiles.ContainsKey(unrar.CurrentFile.FileName))
 | 
			
		||||
                        {
 | 
			
		||||
                            this.progressBar.Value=0;
 | 
			
		||||
                            unrar.Extract();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            unrar.Skip();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch(Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                MessageBox.Show(ex.Message);
 | 
			
		||||
            }
 | 
			
		||||
            finally
 | 
			
		||||
            {
 | 
			
		||||
                this.Cursor=Cursors.Default;
 | 
			
		||||
                this.statusBar.Text = "Ready";
 | 
			
		||||
                this.progressBar.Value=0;
 | 
			
		||||
                if(this.unrar!=null)
 | 
			
		||||
                    unrar.Close();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void AttachHandlers(Unrar unrar)
 | 
			
		||||
        {
 | 
			
		||||
            unrar.ExtractionProgress+=new ExtractionProgressHandler(unrar_ExtractionProgress);
 | 
			
		||||
            unrar.MissingVolume+=new MissingVolumeHandler(unrar_MissingVolume);
 | 
			
		||||
            unrar.PasswordRequired+=new PasswordRequiredHandler(unrar_PasswordRequired);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void unrar_ExtractionProgress(object sender, ExtractionProgressEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            statusBar.Text = "Testing " + e.FileName;
 | 
			
		||||
            progressBar.Value=(int)e.PercentComplete;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void unrar_MissingVolume(object sender, MissingVolumeEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            TextInputDialog dialog=new TextInputDialog();
 | 
			
		||||
            dialog.Value=e.VolumeName;
 | 
			
		||||
            dialog.Prompt=string.Format("Volume is missing.  Correct or cancel.");
 | 
			
		||||
            if(dialog.ShowDialog()==DialogResult.OK)
 | 
			
		||||
            {
 | 
			
		||||
                e.VolumeName=dialog.Value;
 | 
			
		||||
                e.ContinueOperation=true;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
                e.ContinueOperation=false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void unrar_PasswordRequired(object sender, PasswordRequiredEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            TextInputDialog dialog=new TextInputDialog();
 | 
			
		||||
            dialog.Prompt=string.Format("Password is required for extraction.");
 | 
			
		||||
            dialog.PasswordChar='*';
 | 
			
		||||
            if(dialog.ShowDialog()==DialogResult.OK)
 | 
			
		||||
            {
 | 
			
		||||
                e.Password=dialog.Value;
 | 
			
		||||
                e.ContinueOperation=true;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
                e.ContinueOperation=false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										244
									
								
								unrar/Examples/C#/UnrarTest.resx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										244
									
								
								unrar/Examples/C#/UnrarTest.resx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,244 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<root>
 | 
			
		||||
  <!-- 
 | 
			
		||||
    Microsoft ResX Schema 
 | 
			
		||||
    
 | 
			
		||||
    Version 1.3
 | 
			
		||||
    
 | 
			
		||||
    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">1.3</resheader>
 | 
			
		||||
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
 | 
			
		||||
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
 | 
			
		||||
    <data name="Name1">this is my long string</data>
 | 
			
		||||
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
 | 
			
		||||
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
 | 
			
		||||
        [base64 mime encoded serialized .NET Framework object]
 | 
			
		||||
    </data>
 | 
			
		||||
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
 | 
			
		||||
        [base64 mime encoded string representing a byte array form of the .NET Framework object]
 | 
			
		||||
    </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 forserialized 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="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>1.3</value>
 | 
			
		||||
  </resheader>
 | 
			
		||||
  <resheader name="reader">
 | 
			
		||||
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
 | 
			
		||||
  </resheader>
 | 
			
		||||
  <resheader name="writer">
 | 
			
		||||
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
 | 
			
		||||
  </resheader>
 | 
			
		||||
  <data name="rarFileName.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="rarFileName.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="rarFileName.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="selectFile.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="selectFile.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="selectFile.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="rarFileNameLabel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="rarFileNameLabel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="rarFileNameLabel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="fileList.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="fileList.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="fileList.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="fileNameColumnHeader.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="fileNameColumnHeader.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="unpackedSizeColumnHeader.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="unpackedSizeColumnHeader.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="packedSizeColumnHeader.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="packedSizeColumnHeader.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="fileTimestampColumnHeader.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="fileTimestampColumnHeader.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="testButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="testButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="testButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="statusBar.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="statusBar.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="statusBar.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="extractButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="extractButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="extractButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="progressBar.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="progressBar.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="progressBar.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="folderBrowser.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="folderBrowser.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
 | 
			
		||||
    <value>17, 17</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="folderBrowser.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="openFile.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="openFile.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="openFile.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
 | 
			
		||||
    <value>137, 17</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>(Default)</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>False</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
 | 
			
		||||
    <value>2, 2</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>True</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>80</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>True</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.Name">
 | 
			
		||||
    <value>UnrarTest</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
 | 
			
		||||
    <value>Private</value>
 | 
			
		||||
  </data>
 | 
			
		||||
</root>
 | 
			
		||||
		Reference in New Issue
	
	Block a user