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; } } }
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; } } }