Как пропатчить по трем смещениям несколько файлов по нажатию кнопки? - 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);
- }
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д