private void OnRenameClick(object sender, RoutedEventArgs e) { try { OpenFileDialog dlg = new OpenFileDialog { Filter = "Scenes (*.scn, *.bin)|*.scn;*.bin", Multiselect = true }; if (dlg.ShowDialog() != true) { return; } ConcurrentDictionary <int, Tuple <int, string> > dic2 = new ConcurrentDictionary <int, Tuple <int, string> >(); Parallel.ForEach(dlg.FileNames, filePath => { using (FileStream input = File.OpenRead(filePath)) { BattleBinFileReader er = new BattleBinFileReader(input); er.ReadHeader(); er.ReadDescriptorHeader(); IsoTableEntryInfo info = IsoTableEntryInfo.TryParse(filePath); string fileName = er.ReadFileName(); dic2.TryAdd(info.Index, Tuple.Create(info.DefectiveIndex, fileName)); Log.Message(dic2[info.Index].Item2); } }); using (FileStream fs = File.Create(@"W:\\Indices.bin")) { using (Stream input = File.OpenRead(@"C:\Git\C#\Spira\Spira.ISO\SLPS_250.88\AdditionalFileInformation.bin")) input.CopyTo(fs); using (BinaryWriter bw = new BinaryWriter(fs)) { foreach (KeyValuePair <int, Tuple <int, string> > pair in dic2) { bw.Write(pair.Key); bw.Write(pair.Value.Item1); bw.Write((int)(IsoAdditionalInfo.PS2KnownName | IsoAdditionalInfo.PS2KnownSignature)); bw.Write((int)FFXFileSignatures.Scn); bw.Write(pair.Value.Item2); } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
private void SafeExtractInfo(IsoFileCommander fileCommander, IsoTableEntryInfo info, Action <long> progressIncr) { try { if (info.CompressedSize < 1) { return; } fileCommander.ExtractFile(info, Path.Combine(@"W:\FFX", info.GetRelativePath())); } catch (Exception ex) { Log.Error(ex, "Failed to extract file '{0}'", info.GetFileName()); } finally { progressIncr(1); } }