private void listView_MouseClick(object sender, MouseEventArgs e)
        {
            ListViewItem l_ListViewItem = this.listView.GetItemAt(e.X, e.Y);

            if (l_ListViewItem == null)
            {
                return;
            }

            ListViewItemFileInfo l_ListItemFileInfo = ExtractAllThread.s_ListItemHybridDictionary[l_ListViewItem] as ListViewItemFileInfo;

            if (l_ListItemFileInfo == null)
            {
                return;
            }

            if (e.Button == MouseButtons.Right)
            {
                m_ListItemFileInfoRight = l_ListItemFileInfo;
            }
            else
            {
                m_ListItemFileInfoRight = null;
            }

            if (l_ListItemFileInfo.m_iChecksum == 0)
            {
                string l_strFullPath           = l_ListItemFileInfo.m_strFullPath.Substring(1);
                TriggerVFS.FileInfo l_FileInfo = new TriggerVFS.FileInfo();
                if (ExtractAllThread.s_TriggerVFS.GetFileInfo(l_strFullPath, ref l_FileInfo) == true)
                {
                    l_ListItemFileInfo.m_iAttribute = l_FileInfo.m_iAttribute;
                    l_ListItemFileInfo.m_iChecksum  = l_FileInfo.m_iChecksum;
                }
                else
                {
                    this.richTextBox.AppendText("GetFileInfo(" + l_strFullPath + ") Error!\n");
                }

                l_ListItemFileInfo.m_iFileSize = ExtractAllThread.s_TriggerVFS.GetFileSize(l_strFullPath);
            }

            this.textBox1.Text = l_ListItemFileInfo.m_strFullPath.ToString();
            this.textBox6.Text = l_ListItemFileInfo.m_strInArchive.ToString();
            this.textBox5.Text = l_ListItemFileInfo.m_iArchiveNumber.ToString();
            this.textBox3.Text = l_ListItemFileInfo.m_iAttribute.ToString();
            this.textBox2.Text = string.Format("0x{0:X}", ((int)l_ListItemFileInfo.m_iChecksum));
            this.textBox4.Text = l_ListItemFileInfo.m_iFileSize.ToString();
            this.textBox7.Text = false.ToString();
        }
        private void 替换文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (m_ListItemFileInfoRight == null)
            {
                return;
            }

            this.openFileDialog.FileName = m_ListItemFileInfoRight.m_strFileName;
            if (this.openFileDialog.ShowDialog() == DialogResult.OK)
            {
                ExtractAllThread.InitExtractSwapFile(this, this.openFileDialog.FileName, m_ListItemFileInfoRight.m_strFullPath.Substring(1), m_ListItemFileInfoRight.m_strInArchive);
            }

            m_ListItemFileInfoRight = null;
        }
        private void listView_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            ListViewItem l_ListViewItem = this.listView.GetItemAt(e.X, e.Y);

            if (l_ListViewItem == null)
            {
                return;
            }

            ListViewItemFileInfo l_ListItemFileInfo = ExtractAllThread.s_ListItemHybridDictionary[l_ListViewItem] as ListViewItemFileInfo;

            if (l_ListItemFileInfo == null)
            {
                return;
            }

            ExtractAllThread.InitExtractFile(this, l_ListItemFileInfo.m_strFullPath.Substring(1), l_ListItemFileInfo.m_strFileName);
        }
        private void listView_MouseClick( object sender, MouseEventArgs e )
        {
            ListViewItem l_ListViewItem = this.listView.GetItemAt( e.X, e.Y );
            if ( l_ListViewItem == null )
                return;

            ListViewItemFileInfo l_ListItemFileInfo = ExtractAllThread.s_ListItemHybridDictionary[l_ListViewItem] as ListViewItemFileInfo;
            if ( l_ListItemFileInfo == null )
                return;

            if ( e.Button == MouseButtons.Right )
                m_ListItemFileInfoRight = l_ListItemFileInfo;
            else
                m_ListItemFileInfoRight = null;

            if ( l_ListItemFileInfo.m_iChecksum == 0 )
            {
                string l_strFullPath = l_ListItemFileInfo.m_strFullPath.Substring( 1 );
                TriggerVFS.FileInfo l_FileInfo = new TriggerVFS.FileInfo();
                if ( ExtractAllThread.s_TriggerVFS.GetFileInfo( l_strFullPath, ref l_FileInfo ) == true )
                {
                    l_ListItemFileInfo.m_iAttribute = l_FileInfo.m_iAttribute;
                    l_ListItemFileInfo.m_iChecksum = l_FileInfo.m_iChecksum;
                }
                else
                    this.richTextBox.AppendText( "GetFileInfo(" + l_strFullPath + ") Error!\n" );

                l_ListItemFileInfo.m_iFileSize = ExtractAllThread.s_TriggerVFS.GetFileSize( l_strFullPath );
            }

            this.textBox1.Text = l_ListItemFileInfo.m_strFullPath.ToString();
            this.textBox6.Text = l_ListItemFileInfo.m_strInArchive.ToString();
            this.textBox5.Text = l_ListItemFileInfo.m_iArchiveNumber.ToString();
            this.textBox3.Text = l_ListItemFileInfo.m_iAttribute.ToString();
            this.textBox2.Text = string.Format( "0x{0:X}", ((int)l_ListItemFileInfo.m_iChecksum) );
            this.textBox4.Text = l_ListItemFileInfo.m_iFileSize.ToString();
            this.textBox7.Text = false.ToString();
        }
        private void 替换文件ToolStripMenuItem_Click( object sender, EventArgs e )
        {
            if ( m_ListItemFileInfoRight == null )
                return;

            this.openFileDialog.FileName = m_ListItemFileInfoRight.m_strFileName;
            if ( this.openFileDialog.ShowDialog() == DialogResult.OK )
            {
                ExtractAllThread.InitExtractSwapFile( this, this.openFileDialog.FileName, m_ListItemFileInfoRight.m_strFullPath.Substring( 1 ), m_ListItemFileInfoRight.m_strInArchive );
            }

            m_ListItemFileInfoRight = null;
        }
            private static void OpenIndexThreadProc()
            {
                s_isExtractAllThread = true;
                CloseMenu( m_vfsOpenIndexForm );

                m_vfsOpenIndexForm.richTextBox.AppendText( "文件开始读取中...\n" );

                s_TriggerVFS.OpenIndex( "data.idx", false );

                TreeNode l_RootTree = new TreeNode( "Root" );
                for ( int iIndex = 0; iIndex < s_TriggerVFS.FileTreeArray.Length; iIndex++ )
                {
                    m_vfsOpenIndexForm.richTextBox.AppendText( "VFS 文件" + s_TriggerVFS.VFSNames[iIndex] + " 存档数(" + s_TriggerVFS.FileTreeArray[iIndex].m_iFileCount.ToString() + ")\n" );

                    for ( int iIndex2 = 0; iIndex2 < s_TriggerVFS.FileTreeArray[iIndex].m_iFileCount; iIndex2++ )
                    {
                        m_vfsOpenIndexForm.progressBar1.PerformStep();

                        string strPathName = s_TriggerVFS.FileTreeArray[iIndex].m_strFiles[iIndex2];
                        string[] strPath = strPathName.Split( "\\".ToCharArray() );

                        if ( strPath.Length == 0 )
                            continue;

                        TreeNode l_ParentTree = l_RootTree;

                        string strKey = string.Empty;
                        TreeNodeFileInfo l_TreeNodeFileInfoDirectory = null;
                        for ( int iIndex3 = 0; iIndex3 < strPath.Length; iIndex3++ )
                        {
                            if ( s_isFormClose == true )
                            {
                                s_isThreadClose = true;
                                s_isExtractAllThread = false;
                                m_vfsOpenIndexForm.richTextBox.AppendText( "程序关闭中...当前的操作终止" );
                                m_vfsOpenIndexForm.Close();
                                return;
                            }

                            strKey = string.Concat( strKey, "\\", strPath[iIndex3] );

                            TreeNodeFileInfo l_TreeNodeFileInfo = s_strHybridDictionary[strKey] as TreeNodeFileInfo;

                            TreeNode l_TreeNode = null;
                            if ( l_TreeNodeFileInfo == null )
                            {
                                l_TreeNodeFileInfo = new TreeNodeFileInfo();
                                l_TreeNodeFileInfo.m_ListViewItemFileInfo = new List<ListViewItemFileInfo>();
                                l_TreeNode = new TreeNode( strPath[iIndex3] );
                                l_TreeNodeFileInfo.m_TreeNode = l_TreeNode;

                                if ( iIndex3 == ( strPath.Length - 1 ) )
                                {
                                    l_TreeNodeFileInfo.m_strFullPath = strKey;
                                    l_TreeNodeFileInfo.m_strFileName = strPath[strPath.Length - 1];
                                    l_TreeNodeFileInfo.m_strInArchive = s_TriggerVFS.VFSNames[iIndex];
                                    l_TreeNodeFileInfo.m_iArchiveNumber = s_TriggerVFS.FileTreeArray[iIndex].m_iFileCount;

                                    //string l_strFullPath = strKey.Substring( 1 );
                                    //TriggerVFS.FileInfo l_FileInfo = new TriggerVFS.FileInfo();
                                    //if ( s_TriggerVFS.GetFileInfo( l_strFullPath, ref l_FileInfo ) == true )
                                    //{
                                    //    l_TreeNodeFileInfo.m_iAttribute = l_FileInfo.m_iAttribute;
                                    //    l_TreeNodeFileInfo.m_iChecksum = l_FileInfo.m_iChecksum;
                                    //}
                                    //else
                                    //    m_vfsOpenIndexForm.richTextBox.AppendText( "GetFileInfo(" + l_strFullPath + ") Error!\n" );

                                    //l_TreeNodeFileInfo.m_iFileSize = s_TriggerVFS.GetFileSize( l_strFullPath );

                                    // 添加 ListViewItem
                                    ListViewItemFileInfo l_ListViewItemFileInfo = new ListViewItemFileInfo();
                                    l_ListViewItemFileInfo.m_ListViewItem = new ListViewItem( l_TreeNodeFileInfo.m_strFileName );
                                    l_ListViewItemFileInfo.m_strFullPath = strKey;
                                    l_ListViewItemFileInfo.m_strFileName = strPath[strPath.Length - 1];
                                    l_ListViewItemFileInfo.m_strInArchive = s_TriggerVFS.VFSNames[iIndex];
                                    l_ListViewItemFileInfo.m_iArchiveNumber = s_TriggerVFS.FileTreeArray[iIndex].m_iFileCount;
                                    l_TreeNodeFileInfoDirectory.m_ListViewItemFileInfo.Add( l_ListViewItemFileInfo );

                                    s_ListItemHybridDictionary.Add( l_ListViewItemFileInfo.m_ListViewItem, l_ListViewItemFileInfo );
                                }
                                else
                                {
                                    l_TreeNodeFileInfo.m_IsDirectory = true;
                                    l_TreeNodeFileInfo.m_strFullPath = strKey;
                                    l_TreeNodeFileInfo.m_strInArchive = string.Empty;

                                    l_ParentTree.Nodes.Add( l_TreeNode );
                                    s_strHybridDictionary.Add( strKey, l_TreeNodeFileInfo );
                                    s_nodeHybridDictionary.Add( l_TreeNode, l_TreeNodeFileInfo );
                                    l_TreeNodeFileInfoDirectory = l_TreeNodeFileInfo;
                                }
                            }
                            else
                            {
                                l_TreeNode = l_TreeNodeFileInfo.m_TreeNode;
                                l_TreeNodeFileInfoDirectory = l_TreeNodeFileInfo;
                            }

                            l_ParentTree = l_TreeNode;
                        }
                    }
                }

                m_vfsOpenIndexForm.progressBar1.Value = m_vfsOpenIndexForm.progressBar1.Maximum;
                m_vfsOpenIndexForm.progressBar1.Value = 0;

                m_vfsOpenIndexForm.richTextBox.AppendText( "文件读取完成!\n" );

                s_RootTree = l_RootTree;

                OpenMenu( m_vfsOpenIndexForm );
                s_isExtractAllThread = false;
            }
            private static void OpenIndexThreadProc()
            {
                s_isExtractAllThread = true;
                CloseMenu(m_vfsOpenIndexForm);

                m_vfsOpenIndexForm.richTextBox.AppendText("文件开始读取中...\n");

                s_TriggerVFS.OpenIndex("data.idx", false);

                TreeNode l_RootTree = new TreeNode("Root");

                for (int iIndex = 0; iIndex < s_TriggerVFS.FileTreeArray.Length; iIndex++)
                {
                    m_vfsOpenIndexForm.richTextBox.AppendText("VFS 文件" + s_TriggerVFS.VFSNames[iIndex] + " 存档数(" + s_TriggerVFS.FileTreeArray[iIndex].m_iFileCount.ToString() + ")\n");

                    for (int iIndex2 = 0; iIndex2 < s_TriggerVFS.FileTreeArray[iIndex].m_iFileCount; iIndex2++)
                    {
                        m_vfsOpenIndexForm.progressBar1.PerformStep();

                        string   strPathName = s_TriggerVFS.FileTreeArray[iIndex].m_strFiles[iIndex2];
                        string[] strPath     = strPathName.Split("\\".ToCharArray());

                        if (strPath.Length == 0)
                        {
                            continue;
                        }

                        TreeNode l_ParentTree = l_RootTree;

                        string           strKey = string.Empty;
                        TreeNodeFileInfo l_TreeNodeFileInfoDirectory = null;
                        for (int iIndex3 = 0; iIndex3 < strPath.Length; iIndex3++)
                        {
                            if (s_isFormClose == true)
                            {
                                s_isThreadClose      = true;
                                s_isExtractAllThread = false;
                                m_vfsOpenIndexForm.richTextBox.AppendText("程序关闭中...当前的操作终止");
                                m_vfsOpenIndexForm.Close();
                                return;
                            }

                            strKey = string.Concat(strKey, "\\", strPath[iIndex3]);

                            TreeNodeFileInfo l_TreeNodeFileInfo = s_strHybridDictionary[strKey] as TreeNodeFileInfo;

                            TreeNode l_TreeNode = null;
                            if (l_TreeNodeFileInfo == null)
                            {
                                l_TreeNodeFileInfo = new TreeNodeFileInfo();
                                l_TreeNodeFileInfo.m_ListViewItemFileInfo = new List <ListViewItemFileInfo>();
                                l_TreeNode = new TreeNode(strPath[iIndex3]);
                                l_TreeNodeFileInfo.m_TreeNode = l_TreeNode;

                                if (iIndex3 == (strPath.Length - 1))
                                {
                                    l_TreeNodeFileInfo.m_strFullPath    = strKey;
                                    l_TreeNodeFileInfo.m_strFileName    = strPath[strPath.Length - 1];
                                    l_TreeNodeFileInfo.m_strInArchive   = s_TriggerVFS.VFSNames[iIndex];
                                    l_TreeNodeFileInfo.m_iArchiveNumber = s_TriggerVFS.FileTreeArray[iIndex].m_iFileCount;

                                    //string l_strFullPath = strKey.Substring( 1 );
                                    //TriggerVFS.FileInfo l_FileInfo = new TriggerVFS.FileInfo();
                                    //if ( s_TriggerVFS.GetFileInfo( l_strFullPath, ref l_FileInfo ) == true )
                                    //{
                                    //    l_TreeNodeFileInfo.m_iAttribute = l_FileInfo.m_iAttribute;
                                    //    l_TreeNodeFileInfo.m_iChecksum = l_FileInfo.m_iChecksum;
                                    //}
                                    //else
                                    //    m_vfsOpenIndexForm.richTextBox.AppendText( "GetFileInfo(" + l_strFullPath + ") Error!\n" );

                                    //l_TreeNodeFileInfo.m_iFileSize = s_TriggerVFS.GetFileSize( l_strFullPath );

                                    // 添加 ListViewItem
                                    ListViewItemFileInfo l_ListViewItemFileInfo = new ListViewItemFileInfo();
                                    l_ListViewItemFileInfo.m_ListViewItem   = new ListViewItem(l_TreeNodeFileInfo.m_strFileName);
                                    l_ListViewItemFileInfo.m_strFullPath    = strKey;
                                    l_ListViewItemFileInfo.m_strFileName    = strPath[strPath.Length - 1];
                                    l_ListViewItemFileInfo.m_strInArchive   = s_TriggerVFS.VFSNames[iIndex];
                                    l_ListViewItemFileInfo.m_iArchiveNumber = s_TriggerVFS.FileTreeArray[iIndex].m_iFileCount;
                                    l_TreeNodeFileInfoDirectory.m_ListViewItemFileInfo.Add(l_ListViewItemFileInfo);

                                    s_ListItemHybridDictionary.Add(l_ListViewItemFileInfo.m_ListViewItem, l_ListViewItemFileInfo);
                                }
                                else
                                {
                                    l_TreeNodeFileInfo.m_IsDirectory  = true;
                                    l_TreeNodeFileInfo.m_strFullPath  = strKey;
                                    l_TreeNodeFileInfo.m_strInArchive = string.Empty;

                                    l_ParentTree.Nodes.Add(l_TreeNode);
                                    s_strHybridDictionary.Add(strKey, l_TreeNodeFileInfo);
                                    s_nodeHybridDictionary.Add(l_TreeNode, l_TreeNodeFileInfo);
                                    l_TreeNodeFileInfoDirectory = l_TreeNodeFileInfo;
                                }
                            }
                            else
                            {
                                l_TreeNode = l_TreeNodeFileInfo.m_TreeNode;
                                l_TreeNodeFileInfoDirectory = l_TreeNodeFileInfo;
                            }

                            l_ParentTree = l_TreeNode;
                        }
                    }
                }

                m_vfsOpenIndexForm.progressBar1.Value = m_vfsOpenIndexForm.progressBar1.Maximum;
                m_vfsOpenIndexForm.progressBar1.Value = 0;

                m_vfsOpenIndexForm.richTextBox.AppendText("文件读取完成!\n");

                s_RootTree = l_RootTree;

                OpenMenu(m_vfsOpenIndexForm);
                s_isExtractAllThread = false;
            }