public void Process(string fileName, ByteObject obj) { int starts = Int32.Parse(obj.ByteStarts, NumberStyles.HexNumber); int finish = Int32.Parse(obj.ByteFinish, NumberStyles.HexNumber); int diff = finish - starts + 1; int pos = starts; int required = diff; // https://www.dotnetperls.com/seek var outArray = new byte[required]; // 1. // Open as binary file. var inFile = GetInputFile(fileName); var outFile = $"output/{fileName}/data/" + obj.ByteString; using (BinaryReader b = new BinaryReader(inFile)) { int length = (int)b.BaseStream.Length; int count = 0; // 3. // Seek the required index. b.BaseStream.Seek(pos, SeekOrigin.Begin); // 4. // Slow loop through the bytes. while (pos < length && count < required) { byte y = b.ReadByte(); // 5. // Increment the variables. outArray[count] = y; pos++; count++; } } FileStream fs = new FileStream(outFile, FileMode.Create, FileAccess.ReadWrite); BinaryWriter bw = new BinaryWriter(fs); bw.Write(outArray); bw.Close(); }
public void Process(string fileName, string extension) { ByteObjectList.Clear(); var inpFile = fileName + extension; var outFile = "main" + extension; var lines = File.ReadAllLines("input/" + inpFile); var count = 0; for (int index = 0; index < lines.Length; index++) { var line = lines[index]; if (line.Contains("incbin ...")) { var info = String.Empty; if (lines[index - 2].Trim().EndsWith(":") && lines[index - 2].Contains("$")) { info = lines[index - 3]; } else if (lines[index - 1].Contains("_DATA_")) { info = lines[index - 2]; } else { info = lines[index - 1]; } ByteObject obj = CalcByteObject(info, count++); ByteObjectList.Add(obj); var destFile = String.Format(@"""data/{0}""", obj.ByteString); line = line.Replace("...", destFile); lines[index] = line; } } string path = $"output/{fileName}/{outFile}"; File.WriteAllLines(path, lines); }