写扇区时发生莫名错误

vcf_reader 2012-05-05 02:48:39
一直以来,都是在这里回答别人的问题为主。今天实在不好意思,向各位请教一个问题。
我在写磁盘扇区的时候,发生了莫名其妙的错误现象。简单描述如下:
假设字符数组a[],里面有9kBytes内容。将a[]输出到一个文件(设为x文件),同时将a[]写入到物理磁盘上。结果发生了这样一幕:磁盘最开始的512Bytes(Sector 0)和文件x内容一致;磁盘的sector 1和x的第二个512Bytes不一致;然后,磁盘的sector 2的内容是多出来的;磁盘的Sector 3的内容相当于x的Sector 2;……
说起来太复杂,我画个示意图描述如下:
怎么贴图呢?
...全文
364 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
纸箱猪 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

我自己解决了。
原因:被系统其他程序锁定了某些磁道
[/Quote]

听上去很可怕,这让我们以后用WriteFile怎么放心?
zO_Oz 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

我自己解决了。
原因:被系统其他程序锁定了某些磁道
[/Quote]
杀软?还是?
Lactoferrin 2012-05-05
  • 打赏
  • 举报
回复
有无参考文献
vcf_reader 2012-05-05
  • 打赏
  • 举报
回复
我自己解决了。
原因:被系统其他程序锁定了某些磁道
Lactoferrin 2012-05-05
  • 打赏
  • 举报
回复
你怎么写的,怎么看的
vcf_reader 2012-05-05
  • 打赏
  • 举报
回复
3.将内容置为0x01,写扇区,从扇区1开始,每个字节都是0x01.扇区0的字节内容都不是0x01

4.将内容置为0xFF,写扇区,从扇区1开始,每个字节都是0xFF.扇区0的字节内容都不是0xFF


莫名其妙啊
vcf_reader 2012-05-05
  • 打赏
  • 举报
回复
莫名其妙啊,其他的现象:
1,将内容置为0,写扇区,每个扇区每个字节都是0,正确。
2.将内容置为0x55,写扇区,从扇区1开始,每个字节都是0x55.扇区0的字节内容都不是0x55
Lactoferrin 2012-05-05
  • 打赏
  • 举报
回复
是不是你眼花了
vcf_reader 2012-05-05
  • 打赏
  • 举报
回复
将内容全部赋值为0,写入扇区的时候,每个扇区的都是正确的(包括扇区1和扇区2)
纸箱猪 2012-05-05
  • 打赏
  • 举报
回复
等等,楼主是不是通过ReadFile或是其它读文件函数得知“磁盘的1号扇区”与“文件的1号扇区”不一致的?这里的“磁盘”不会真的是物理磁盘吧?那可是要通过更底层的驱动得知的,而且如果真的是指物理磁盘的话,这个现象倒是很正常,因为文件在磁盘中不见得是连续存放的。
纸箱猪 2012-05-05
  • 打赏
  • 举报
回复
WriteFile返回值为TRUE?这么说WriteFile没有出错。

1号扇区里的内容是啥?我也有点好奇。这搞不好其实是程序其它部分的逻辑错误。
Lactoferrin 2012-05-05
  • 打赏
  • 举报
回复
单独读写1号扇形会如何
vcf_reader 2012-05-05
  • 打赏
  • 举报
回复
另外,当且仅当函数返回错误时,GetLastError才有意义
vcf_reader 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
楼主让以问问题为主的各位新人情何以堪。

GetLastError()返回值是什么?
[/Quote]

倒是没有关心这个返回值。
但是函数本身返回 true,且dwBytesWritten返回的实际写入字节数恰好等于想要写入的字节数mbrActualLenth

本身这个函数在我另一个程序里面同样的使用是正常的。
纸箱猪 2012-05-05
  • 打赏
  • 举报
回复
楼主让以问问题为主的各位新人情何以堪。

GetLastError()返回值是什么?
vcf_reader 2012-05-05
  • 打赏
  • 举报
回复
继续补充说明。
貌似这个写入函数对磁盘的扇区1和2不起作用???
但是,同样这个写入的函数,在我的另一个程序里面用的好好的。而且是同一个磁盘。
vcf_reader 2012-05-05
  • 打赏
  • 举报
回复
贴图发生错误。补充说明一下。
扇区0,在文件和磁盘上的内容相同
磁盘扇区x的内容和文件“扇区”x-1的内容相同(x大于等于3)
也就是说,磁盘上的扇区1和扇区2的内容是莫名其妙多出来的。
写入磁盘用的是如下语句:

WriteFile(hDevice, &mbrBuf[0], mbrActualLenth, &dwBytesWritten, NULL);

64,631

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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