private void ExtractISO_Directory(CDReader cd, string outputFolder, string cd_path) { var real_directory = string.Format("{0}/{1}", outputFolder, cd_path); if (!Directory.Exists(real_directory)) { Directory.CreateDirectory(real_directory); } var cd_directories = cd.GetDirectories(cd_path); foreach (var cd_directory in cd_directories) { ExtractISO_Directory(cd, outputFolder, cd_directory); } var cd_files = cd.GetFiles(cd_path); foreach (var cd_file in cd_files) { var fileStream = cd.OpenFile(cd_file, FileMode.Open); var attributes = cd.GetAttributes(cd_file); var real_file = string.Format("{0}/{1}", outputFolder, cd_file); Log($"extracting {cd_file} to {real_file}"); using (var writerStream = File.OpenWrite(real_file)) { var max_chunk = 1024; var buffer = new byte[max_chunk]; for (var b = 0; b < fileStream.Length; b += max_chunk) { var amount = (int)Math.Min(max_chunk, fileStream.Length - b); fileStream.Read(buffer, 0, amount); writerStream.Write(buffer, 0, amount); } } fileStream.Dispose(); } }