如何修改文件的文件头?

2017-10-31 23:23:39 +08:00
 Famio
比如 jpg 的文件头是 ffd8ff,我能用 binaryReader 读到。
问题是如何回写,或者修改,试着创建一个新文件再通过 binaryWriter 写进去,用 UE 打开不是十六进制的,而是普通的把字符串写进去了= =
有人知道如何处理么
5664 次点击
所在节点    C#
6 条回复
congeec
2017-10-31 23:46:21 +08:00
你需要一个 hex 编辑器。比如 HexFiend。vim 也能干这事儿
nannanziyu
2017-11-01 00:02:20 +08:00
@congeec
楼主都说用 UE 打开了,UE 直接就能编辑,别人还问什么。别人显然是问编程的事情,不要胡乱回答好吗?

@Famio
binaryWriter 都有 Encoding 了,当然不是直接编辑 byte 了。
直接 FileStream.Open 打开文件流,seek 到指定位置(默认就在 0 位置,所以编辑头可以省略),然后 stream.Write 直接写 byte 就行了
Famio
2017-11-01 10:50:52 +08:00
@nannanziyu 所以写入的时候不是用 binaryWriter 了哦?我试着用 stream.Write,看样子是只能写 byte[]类型。
另外我读出来的是个字符串形式的,大致要什么格式。
大神请教下,感谢

我的代码:
nannanziyu
2017-11-01 14:58:19 +08:00
@Famio
都说了 binaryWriter 有 Encoding 了,你为啥非要把着 binaryWriter 不放呢
static void Main(string[] args)
{
var buff = new byte[1024];
using (var fsReader = File.OpenRead(@"d:\1.png"))
{
using (var fsWriter = File.OpenWrite(@"d:\2.png"))
{
var readLength = fsReader.Read(buff, 0, buff.Length);
while (readLength>0)
{
fsWriter.Write(buff, 0, readLength);
readLength = fsReader.Read(buff, 0, buff.Length);
}
}
}
}
LJ2010
2017-11-01 15:30:38 +08:00
既然都能读到对应 byte 了,那么把对应文件头数据直接修改不就可以了吗? 类似 byte[0]=0xf;//直接修改为对应文件类型字节
Famio
2017-11-01 22:05:02 +08:00
@nannanziyu 感谢感谢!
后来我搞定了,我先把 hex 转成 byte[],然后再用 BinaryWriter 写进去了,终于搞定,谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402426

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX