You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#修改二进制文件第13位十六进制值不生效如何解决?

相关HxD十六进制编辑器截图参考:
查看HxD十六进制编辑器截图了解更多细节

问题原因
  • 偏移计数混淆:C# 的流位置Stream.Position采用0基索引,文件第一个字节对应位置为0,如果您要修改的是按顺序数的第13个字节,对应位置应为12,代码中设置Position = 13实际修改的是第14个字节,自然看不到预期修改效果。如果您是要修改HxD中偏移值为0x0D(即十进制13)的位置,该参数是正确的。
  • 文件占用冲突:如果目标文件正被其他程序(如HxD、其他编辑器)打开占用,写入操作会被拦截,部分场景下未捕获异常时不会弹出报错提示,看似无效果。
  • 编辑器未刷新:HxD打开文件后会缓存内容,写入操作完成后需要手动按F5刷新HxD的视图,才能看到最新的修改结果。
  • 权限不足:如果目标文件在系统保护目录(如Program Files、Windows目录),或者文件属性设置为只读,会导致写入权限不足操作失败。
解决方法
  • 确认目标偏移:直接从HxD左侧的偏移栏读取你要修改的位置的十进制/十六进制数值,赋值给stream.Position即可,不要手动数字节数避免计数错误。比如要修改HxD中偏移为0x0C的位置,对应十进制为12,就设置stream.Position = 12。
  • 操作前关闭所有打开该文件的第三方程序,避免占用冲突。
  • 写入完成后按F5刷新HxD视图确认修改结果。
  • 添加异常捕获逻辑,快速定位写入失败的具体原因。
参考优化代码
private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        textBox1.Text = openFileDialog.FileName;
    }
}

private void button2_Click(object sender, EventArgs e)
{
    string fileName = textBox1.Text;
    // 先校验文件是否存在
    if (string.IsNullOrWhiteSpace(fileName) || !File.Exists(fileName))
    {
        MessageBox.Show("请先选择有效的二进制文件");
        return;
    }

    try
    {
        using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
        {
            // 如需修改顺序第13个字节,将下方13改为12即可
            stream.Position = 13;
            stream.WriteByte(0x00);
        }
        MessageBox.Show("写入完成,请刷新十六进制编辑器查看效果");
    }
    catch (IOException ioEx)
    {
        MessageBox.Show($"文件被占用或IO错误:{ioEx.Message}");
    }
    catch (UnauthorizedAccessException authEx)
    {
        MessageBox.Show($"无写入权限,请检查文件是否为只读或在系统保护目录:{authEx.Message}");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"写入失败:{ex.Message}");
    }
}

内容的提问来源于stack exchange,提问作者OndiAluc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:06:04