| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 987 人关注过本帖
标题:如何实现在硬盘上任何一个位置开始读取数据?偏移貌似有大小限制。
取消只看楼主 加入收藏
tk1223108078
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2013-7-18
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:6 
如何实现在硬盘上任何一个位置开始读取数据?偏移貌似有大小限制。
代码如下所示
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
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
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
tk1223108078
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2013-7-18
收藏
得分:0 
回复 11楼 lz1091914999
。。。。这个你也学习,,,
2013-10-24 08:30
快速回复:如何实现在硬盘上任何一个位置开始读取数据?偏移貌似有大小限制。
数据加载中...
 
   



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

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