internal static void ReplaceFileInIso(IsoFileInfo fileToReplace, string pathToNewFile) { var newFile = new FileStream(pathToNewFile, System.IO.FileMode.Open, System.IO.FileAccess.Read); byte[] newFileData = new byte[newFile.Length]; newFile.Read(newFileData, 0, (int)newFile.Length); newFile.Close(); ReplaceFileInIso(fileToReplace, newFileData); }
internal static byte[] OpenDatFile(IsoFileInfo info) { byte[] outFile = new byte[info.Size]; _streamFile.Seek(info.FileOffset, SeekOrigin.Begin); for (int i = 0; i < info.Size; i++) { outFile[i] = (byte)_streamFile.ReadByte(); } return(outFile); }
internal static void ReplaceFileInIso(IsoFileInfo fileToReplace, byte[] newFileData) { if (fileToReplace.Size != newFileData.Length) { MessageBox.Show("Error: New file is not the same size!"); return; } _streamFile.Seek(fileToReplace.FileOffset, SeekOrigin.Begin); _streamFile.Write(newFileData, 0, newFileData.Length); MessageBox.Show("File replacement has completed successfully!"); }
internal static void ExportFileFromIso(IsoFileInfo info, SaveFileDialog dialog) { Stream myStream; if ((myStream = dialog.OpenFile()) != null) { var fileToSave = new byte[info.Size]; _streamFile.Seek(info.FileOffset, SeekOrigin.Begin); _streamFile.Read(fileToSave, 0, (int)info.Size); myStream.Write(fileToSave, 0, (int)info.Size); myStream.Close(); } }
private void button4_Click(object sender, EventArgs e) { string datFileName = DatFile.fileName; IsoFileInfo fileInfo = IsoFile.SearchIso(datFileName, filesystemTreeView.Nodes[0]); if (fileInfo == null) { MessageBox.Show("Error finding file in disc image!"); } else { IsoFile.ReplaceFileInIso(fileInfo, DatFile.file); } }
private void Button_Export_Click(object sender, EventArgs e) { IsoFileInfo info = (IsoFileInfo)filesystemTreeView.SelectedNode.Tag; String extension = info.Name.Substring(info.Name.IndexOf('.')); var saveFileDialog1 = new SaveFileDialog { Title = "Export File", InitialDirectory = Settings.Default.saveDatFilePath, FileName = info.Name, Filter = "All files|*.*", FilterIndex = 1, AddExtension = true }; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { Settings.Default.saveDatFilePath = Path.GetDirectoryName(saveFileDialog1.FileName); IsoFile.ExportFileFromIso(info, saveFileDialog1); } }
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (filesystemTreeView.SelectedNode == null || filesystemTreeView.SelectedNode.Nodes.Count > 0) { Button_Export.Enabled = false; Button_Open.Enabled = false; button6.Enabled = false; } else { Button_Export.Enabled = filesystemTreeView.SelectedNode.Text.IndexOf(".") != -1; Button_Open.Enabled = filesystemTreeView.SelectedNode.Text.IndexOf(".") != -1; button6.Enabled = filesystemTreeView.SelectedNode.Text.IndexOf(".") != -1; } IsoFileInfo fileInfo = (IsoFileInfo)filesystemTreeView.SelectedNode.Tag; label5.Text = fileInfo.Name; label4.Text = fileInfo.Size.ToString() + " bytes"; }
internal static void BuildNodes(TreeNode root, uint endOffset) { IsoFileInfo rootInfo = (IsoFileInfo)root.Tag; uint currentOffset = rootInfo.FSTOffset + 0xC; while (currentOffset < endOffset) { _streamFile.Seek(currentOffset, SeekOrigin.Begin); bool isNewNodeFolder = _streamFile.ReadByte() == 1; var buffer = new byte[4]; _streamFile.Read(buffer, 1, 3); buffer[0] = 0; if (BitConverter.IsLittleEndian) { Array.Reverse(buffer); } uint newNodeStringOffset = BitConverter.ToUInt32(buffer, 0); string newNodeName = GetFilename(newNodeStringOffset); _streamFile.Read(buffer, 0, 4); if (BitConverter.IsLittleEndian) { Array.Reverse(buffer); } uint newNodeFileOffset = BitConverter.ToUInt32(buffer, 0); //If a folder, this is offset to parent _streamFile.Read(buffer, 0, 4); if (BitConverter.IsLittleEndian) { Array.Reverse(buffer); } uint newNodeFileSize = BitConverter.ToUInt32(buffer, 0); //If a folder, this is the # of files (from FST start) to the next non-child entry var newNode = new TreeNode(newNodeName); newNode.Tag = new IsoFileInfo(newNodeName, newNodeFileSize, newNodeFileOffset, currentOffset, isNewNodeFolder); string fileType = newNodeName.Substring(0, 2); switch (fileType) { case "Pl": newNode.ImageIndex = 1; newNode.SelectedImageIndex = 1; break; case "Gr": newNode.ImageIndex = 2; newNode.SelectedImageIndex = 2; break; default: if (isNewNodeFolder) { newNode.ImageIndex = 3; newNode.SelectedImageIndex = 3; } break; } root.Nodes.Add(newNode); currentOffset += 0xC; if (isNewNodeFolder) { currentOffset = FSTOffset + (newNodeFileSize * 0xC); BuildNodes(newNode, currentOffset); } } }
private void Button_Open_Click(object sender, EventArgs e) { IsoFileInfo info = (IsoFileInfo)filesystemTreeView.SelectedNode.Tag; OpenDatFileAndUpdateWindow(IsoFile.OpenDatFile(info), info.Name); }
internal static byte[] OpenDatFile(IsoFileInfo info) { byte[] outFile = new byte[info.Size]; _streamFile.Seek(info.FileOffset, SeekOrigin.Begin); for (int i = 0; i < info.Size; i++) { outFile[i] = (byte) _streamFile.ReadByte(); } return outFile; }
internal static void ExportFileFromIso(IsoFileInfo info, SaveFileDialog dialog) { Stream myStream; if ((myStream = dialog.OpenFile()) != null) { var fileToSave = new byte[info.Size]; _streamFile.Seek(info.FileOffset, SeekOrigin.Begin); _streamFile.Read(fileToSave, 0, (int) info.Size); myStream.Write(fileToSave, 0, (int) info.Size); myStream.Close(); } }