| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 987 人关注过本帖
标题:如何实现在硬盘上任何一个位置开始读取数据?偏移貌似有大小限制。
只看楼主 加入收藏
tk1223108078
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2013-7-18
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:11 
如何实现在硬盘上任何一个位置开始读取数据?偏移貌似有大小限制。
代码如下所示
int main()
{
    unsigned char buf[512]={0};
    OVERLAPPED overlap;
    long int i;
    HANDLE hFile = CreateFile("\\\\.\\PhysicalDrive0",//\\\\.\\PhysicalDrive0..D://123.txt
                       GENERIC_READ|GENERIC_WRITE,
                       FILE_SHARE_READ,
                       NULL,
                       OPEN_EXISTING,
                       0,//FILE_FLAG_OVERLAPPED,
                       NULL);
    DWORD RSize=0;
    overlap.Offset = i*512;
    ReadFile(hFile, buf, 512, &RSize, &overlap);
    //可将buf显示在某区域或写入另一个文件来检查读出是否正确
    CloseHandle(hFile);
    ReadMBR(buf,0,511);
}
overlap.Offset = i*512;这里是读取文件开始位置的偏移,但是貌似有大小限制,超过4个G左右就无法在正确的读取数据了,求教各位有什么办法可以解决?
搜索更多相关主题的帖子: 如何 
2013-10-22 16:09
tk1223108078
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2013-7-18
收藏
得分:0 
不需要用内存映射的吧,就用API函数应该可以解决的吧?
2013-10-22 16:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
4G? 我猜 overlap.Offset 的类型存不了大于4G的数值,找找是不是还有 overlap.高Offset 或 overlap.Offset高 之类的成员
2013-10-22 16:26
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
收藏
得分:0 
你确定你这个i的值是有效的?
2013-10-22 16:31
tk1223108078
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2013-7-18
收藏
得分:0 
回复 3楼 rjsp
这些类型可以偏移多大了?,一般硬盘都500G了,可以有这大小吗?
2013-10-22 16:47
tk1223108078
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2013-7-18
收藏
得分:0 
回复 4楼 C_printf
i可以自己改为数值,这个应该不是这个问题
2013-10-22 16:48
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
收藏
得分:0 
回复 6楼 tk1223108078
这个值是DWORD类型。
2013-10-22 18:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
以下是引用tk1223108078在2013-10-22 16:47:05的发言:

这些类型可以偏移多大了?,一般硬盘都500G了,可以有这大小吗?
我的意思是……,算了,还是心平气和一些,你试试
overlap.OffsetHigh = (DWORD)( i*512ull / 0x100000000ull );
overlap.Offset     = (DWORD)( i*512ull % 0x100000000ull );
2013-10-23 09:12
tk1223108078
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2013-7-18
收藏
得分:0 
回复 8楼 rjsp
真心非常感谢。用你的代码终于可以读出来了,,这个问题搞了我好长时间了,这个是固定的格式吗?
2013-10-23 11:39
tk1223108078
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2013-7-18
收藏
得分:0 
回复 7楼 C_printf
额好像是的,我不是太懂,还是谢谢你帮忙
2013-10-23 11:40
快速回复:如何实现在硬盘上任何一个位置开始读取数据?偏移貌似有大小限制。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021483 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved