/// <summary> /// Builds game ROM or copies game files to output path. /// </summary> /// <param name="inputPath">Input path of the game files</param> /// <param name="outputPath">Output path to folder or file</param> void BuildGame(string inputPath, string outputPath) { if (Pipeline == null) { Console.WriteLine("Error: Pipeline not ready!"); return; } bool directoryMode = IO_Common.PathIsFolder(outputPath); if (directoryMode) { //Directory Mode - just copy files to output DirectoryInfo di = new DirectoryInfo(inputPath); if (Pipeline.Metadata.Console == ConsoleMode.PS2) { foreach (DirectoryInfo dir in di.EnumerateDirectories()) { foreach (FileInfo file in dir.EnumerateFiles()) { file.MoveTo(file.FullName); } IO_Common.Recursive_RenameFiles(dir); } foreach (FileInfo file in di.EnumerateFiles()) { file.MoveTo(file.FullName); } } if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } string pathparent = outputPath + @"\"; foreach (DirectoryInfo dir in di.EnumerateDirectories()) { Directory.CreateDirectory(pathparent + dir.Name); foreach (FileInfo file in dir.EnumerateFiles()) { file.CopyTo(pathparent + dir.Name + @"\" + file.Name); } IO_Common.Recursive_CopyFiles(dir, pathparent + dir.Name + @"\"); } foreach (FileInfo file in di.EnumerateFiles()) { file.CopyTo(pathparent + file.Name); } } else { Pipeline.Build(inputPath, outputPath); } }
public override void Build(string inputPath, string outputPath) { if (!isCDimage) { //Use PS2ImageMaker DirectoryInfo di = new DirectoryInfo(inputPath); foreach (DirectoryInfo dir in di.EnumerateDirectories()) { foreach (FileInfo file in dir.EnumerateFiles()) { file.MoveTo(file.FullName); } IO_Common.Recursive_RenameFiles(dir); } foreach (FileInfo file in di.EnumerateFiles()) { file.MoveTo(file.FullName); } buildInputPath = inputPath; buildOutputPath = outputPath; AsyncWorker = new BackgroundWorker(); AsyncWorker.WorkerReportsProgress = true; AsyncWorker.DoWork += new DoWorkEventHandler(Builder_DoWork); AsyncWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Builder_RunWorkerCompleted); AsyncWorker.ProgressChanged += new ProgressChangedEventHandler(Builder_ProgressChanged); AsyncWorker.RunWorkerAsync(); } else { // Use CDBuilder CDBuilder isoBuild = new CDBuilder(); isoBuild.UseJoliet = true; isoBuild.VolumeIdentifier = ISO_Label; // CD image adjustments DirectoryInfo dit = new DirectoryInfo(inputPath); foreach (DirectoryInfo dir in dit.EnumerateDirectories()) { foreach (FileInfo file in dir.EnumerateFiles()) { file.MoveTo(file.FullName); } IO_Common.Recursive_RenameFiles(dir); } foreach (FileInfo file in dit.EnumerateFiles()) { file.MoveTo(file.FullName); } DirectoryInfo di = new DirectoryInfo(inputPath); HashSet <FileStream> files = new HashSet <FileStream>(); foreach (DirectoryInfo dir in di.GetDirectories()) { ISO_Common.Recursive_AddDirs(isoBuild, dir, dir.Name + @"\", files, true); } foreach (FileInfo file in di.GetFiles()) { ISO_Common.AddFile(isoBuild, file, string.Empty, files, true); } using (FileStream output = new FileStream(outputPath, FileMode.Create, FileAccess.Write)) using (Stream input = isoBuild.Build()) { ISO2PSX.Run(input, output); } foreach (FileStream file in files) { file.Close(); } } }