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

如何修改文件的文件头?

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

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

    我的代码:
        4
    nannanziyu   205 天前
    @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);
    }
    }
    }
    }
        5
    LJ2010   205 天前
    既然都能读到对应 byte 了,那么把对应文件头数据直接修改不就可以了吗? 类似 byte[0]=0xf;//直接修改为对应文件类型字节
        6
    Famio   204 天前
    @nannanziyu 感谢感谢!
    后来我搞定了,我先把 hex 转成 byte[],然后再用 BinaryWriter 写进去了,终于搞定,谢谢!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1791 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 16ms · UTC 12:34 · PVG 20:34 · LAX 05:34 · JFK 08:34
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1