public void OpenContainerFile()
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                FileInfo selectedFile = new FileInfo(openFileDialog.FileName);

                switch (selectedFile.Extension.ToLower())
                {
                case ".mix":
                    MIXFile mixFile;

                    if (!openFiles.ContainsKey(openFileDialog.FileName))
                    {
                        mixFile = new MIXFile(openFileDialog.FileName);
                        openFiles.Add(openFileDialog.FileName, mixFile);
                    }
                    else
                    {
                        mixFile = openFiles[openFileDialog.FileName];
                    }

                    if (!mixFile.IsValid)
                    {
                        MessageBox.Show("Invalid MIX file!", "Error loading file", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                    UpdateMemoryUsage();

                    TreeNode rootNode = new TreeNode(openFileDialog.FileName);
                    rootNode.ImageIndex = 0;
                    SolveFiles(ref mixFile, rootNode);
                    treeItems.Nodes.Add(rootNode);

                    treeItems.Sort();

                    break;
                }
            }
        }
Esempio n. 2
0
        private void SolveFiles(ref MIXFile mixFile, TreeNode rootNode)
        {
            foreach (var file in mixFile.Files)
            {
                FileInfo selectedFile = new FileInfo(file.Name);

                switch (selectedFile.Extension.ToLower())
                {
                case ".mix":
                    MIXFile embeddedMixFile;

                    if (!openFiles.ContainsKey(file.Name))
                    {
                        SubStream embeddedFile = mixFile.GetFileAsStream(file);
//                            byte[] embeddedFile = mixFile.GetFile(file);
                        embeddedMixFile = new MIXFile(embeddedFile, file.Name);
                        openFiles.Add(file.Name, embeddedMixFile);
                    }
                    else
                    {
                        embeddedMixFile = openFiles[file.Name];
                    }

                    TreeNode subRootNode = new TreeNode(selectedFile.Name);
                    subRootNode.Tag = selectedFile.Name;
                    subRootNode.SelectedImageIndex = 0;
                    subRootNode.ImageIndex         = 0;

                    SolveFiles(ref embeddedMixFile, subRootNode);

                    rootNode.Nodes.Add(subRootNode);

                    UpdateMemoryUsage();

                    break;
                }
            }
        }