如何解决替换一个字节的数据
我试图从文件中只替换一个字节的数据,意思是 0X05 -> 0X15。 我正在使用替换功能来做到这一点。
using (StreamReader reader = new System.IO.StreamReader(Inputfile))
{
content = reader.ReadToEnd();
content = content.Replace("0x05","0x15");
reader.Close();
}
using (FileStream stream = new FileStream(outputfile,FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(stream,Encoding.UTF8))
{
writer.Write(content);
}
}
从技术上讲,只有那个字节的数据必须用新字节替换,但我看到有很多字节的数据发生了变化。
为什么其他字节在改变?我怎样才能做到这一点?
解决方法
您在谈论字节,但您已经编写了读取字符串的代码;字符串是对字节的一种解释,所以如果你真的是指字节,那么通过字符串来处理它们是错误的方法
无论如何,如果文件相对较小(可能高达 500mb - 如果比这更大,我会切换到使用增量流读取/更改/写入方法)
>如果你想改变字节:
var b = File.ReadAllBytes("path");
for(int x = 0; x < b.Length; x++)
if(b[x] == 0x5)
b[x] = (byte)0x15;
File.WriteAllBytes("path",b);
如果您的文件是一个文本文件,里面确实有“0x05”:
File.WriteAllText("path",File.ReadAllText("path").Replace("0x05","0x15"));
为了回应您在评论中的问题,并假设您希望您的文件每包含一个 0x05 就增加 2 个字节(因此,包含三个 0x05 字节的 1000 字节文件在写入后将是 1006 个字节)它是可能最简单:
var b = File.ReadAllBytes("path");
using(FileStream fs = new FileStream("path",FileMode.Create)) //replace file
{
for(int x = 0; x < b.Length; x++)
if(b[x] == 0x5) {
fs.WriteByte((byte)0x15);
fs.WriteByte((byte)0x5);
fs.WriteByte((byte)0x15);
} else
fs.WriteByte(b);
}
不要担心一次写入一个字节 - 它在 IO 链的其他地方缓冲。如果你愿意,你可以去寻找一个从数组中写入字节块的解决方案......这更容易编码/理解
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。