V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Famio
V2EX  ›  C#

如何修改文件的文件头?

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

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

    我的代码:
    nannanziyu
        4
    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
        5
    LJ2010  
       2017-11-01 15:30:38 +08:00
    既然都能读到对应 byte 了,那么把对应文件头数据直接修改不就可以了吗? 类似 byte[0]=0xf;//直接修改为对应文件类型字节
    Famio
        6
    Famio  
    OP
       2017-11-01 22:05:02 +08:00
    @nannanziyu 感谢感谢!
    后来我搞定了,我先把 hex 转成 byte[],然后再用 BinaryWriter 写进去了,终于搞定,谢谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1112 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:48 · PVG 02:48 · LAX 10:48 · JFK 13:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.