Как пропатчить по трем смещениям несколько файлов по нажатию кнопки? - C#
Формулировка задачи:
В папке есть 55 файлов. Надо сделать, чтоб по нажатию кнопки, произошло умножение значений сразу в 55 файлах по трем смещениям 0x330, 0x340, 0x350, на значение, которое написали в numericUpDown2 (например умножение на 1.5). (В некоторых файлах нужно пропатчивать только по одному или двум смещениям, а не по трем как в большинстве).
Подсказали что надо: Считываешь файл в массив байт, заменяешь нужные и перезаписываешь файлы. Если имена файлов известны, то можно прям в коде имена указать. (Имена файлов: scene1, scene2 и т.д.)
Заметка: Данные в файлах в перевернутом шестнадцетиричном виде. Например 100 000 (десятичное) четырехбайтное значение выглядит в файле: A0 86 01 00, а не 00 01 86 A0. Делается это для упрощения редактирования. Редактирование вручную занимает от 19 до 30 часов, (около трех дней по 7 часов). Потому что есть 6 таких показателей по трем смещениям в 256 файлах, а это 256 * 3 * 6 = 4608 редактирований.
Решение задачи: «Как пропатчить по трем смещениям несколько файлов по нажатию кнопки?»
textual
Листинг программы
static unsafe void PatchFiles() { long[] offsets = {0x330, 0x340, 0x350}; byte[] buf4 = new byte[4]; double mulitplyBy = 1.5; foreach (string fileName in Directory.EnumerateFiles(@"c:\SomeFolder", "scene*")) { using (var fstream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) { foreach (long offset in offsets) { if (offset+4 < fstream.Length) { fstream.Position = offset; fstream.Read(buf4, 0, 4); int n = (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); fixed(byte* b = buf4) { *((int*)b) = n; } fstream.Position -= 4; fstream.Write(buf4, 0, 4); } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д