文件头变了(记事本打开二进制文件),散分呢!~

xiunai78 2010-12-22 11:47:37
今天遇到个诡异的问题,或者是有趣的问题。
自己写的一个程序,将一个结构体的信息保存到一个二进制文件里面。
二进制开头4字节是自己定的文件头标识:FF 10 FF 00 7B 00 00 00

然后就想测试一下,如果二进制文件损坏(文件头标识没损坏)的情况下,程序读写会不会崩溃。
然后我用记事本打开二进制文件,直接删除中间部分的内容,保存。程序读的时候居然判断出文件类型不对。
后来用VS2003的二进制方式查看,当用文本文件修改文件中间部分(注意没有修改文件头标识),然后文件头
居然莫名奇妙的改变了。

有哪位xdjm 对文件的机制或者对记事本读写文本文件机制比较清楚的,大家探讨下。为什么用文本文件修改
二进制的中间部分内容。文件头会跟随变化的呢?同样的问题,如果用2003二进制方式打开修改中间部分内容,文
件头却能保持不变~~~
...全文
463 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dooX8086 2010-12-22
  • 打赏
  • 举报
回复
- -!!!!
你用记事本打开..-->再保存,是会往文件头写编码信息的.
dooX8086 2010-12-22
  • 打赏
  • 举报
回复
文件头变了???二进制写入???
是不是大小序问题.
不是内容变了,而是位置不是你想像的那样
dubiousway 2010-12-22
  • 打赏
  • 举报
回复
用其他文本编辑器编辑呢,比如notepad, 文件头变不变?
xiunai78 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 luciferisnotsatan 的回复:]

编码 选 ANSI,开头应该不会有 编码信息
[/Quote]

xd 看清题目啊~~~
mikithebest 2010-12-22
  • 打赏
  • 举报
回复
这个应该是编码的问题。。windows的记事本支持 ANSI UTF-8 Unicode,当记事本打开一个文件时,会通过文件内容“猜”测编码格式,保存的时候就以这种格式保存。

比如你用记事本输入“联通”,保存后, 再打开,看看会出现什么。。。。。
luciferisnotsatan 2010-12-22
  • 打赏
  • 举报
回复
编码 选 ANSI,开头应该不会有 编码信息
luciferisnotsatan 2010-12-22
  • 打赏
  • 举报
回复
记事本就是用来打开文本文件的。默认用记事本打开的几个格式都是文本文件。
用户如果用记事本打开二进制文件,那是用户的问题。不是记事本bug。
就像不小心把操作系统的一些文件删了,操作系统出问题了,是不是系统bug一样。
xiunai78 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiunai78 的回复:]

引用 3 楼 doox8086 的回复:

- -!!!!
你用记事本打开..-->再保存,是会往文件头写编码信息的.


果然是啊,如果我打开然后直接关闭。就是正常的。
但是如果我打开后,点击一下保存。然后就不正常了~

能说明一下是什么原因么?记事本对于被打开的文件是怎么进行解读的?为什么什么操作都不做都会给
我更改文件的呢~~~
[/Quote]

那用户如果不小心用记事本打开了文件然后,又不小心的 按了 下 Ctrl + s
(本人写程序的时候就习惯的按 Ctrl + s) ,那不麻烦大了~~~~~,这算不算是
记事本的bug啊?
xiunai78 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 doox8086 的回复:]

- -!!!!
你用记事本打开..-->再保存,是会往文件头写编码信息的.
[/Quote]

果然是啊,如果我打开然后直接关闭。就是正常的。
但是如果我打开后,点击一下保存。然后就不正常了~

能说明一下是什么原因么?记事本对于被打开的文件是怎么进行解读的?为什么什么操作都不做都会给
我更改文件的呢~~~
luciferisnotsatan 2010-12-22
  • 打赏
  • 举报
回复
记事本是文本编辑器,打开二进制文件再保存会出问题。

比如0x0,用记事本打开会变成一个空白,再保存就被当作空格了0x20

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧