找回密码
 注册
查看: 2010|回复: 2

怎样读取超大偏移量的字符

[复制链接]
发表于 2010-2-16 01:11:41 | 显示全部楼层 |阅读模式
这个问题是在C++操作win下物理磁盘时发生的
  1. void analyze_extended_partition(unsigned int sector_pre)
  2. {
  3.         cout << sector_pre << endl;
  4.         extended_partition_offset = sector_pre * BYTE_PER_SECTOR;
  5.         cout << extended_partition_offset << endl;
  6.         
  7.     char buffer[512];
  8.     ifstream in("\\\\.\\PHYSICALDRIVE0",ios::binary|ios::in);
  9.         in.seekg(extended_partition_offset, ios::beg);
  10.     in.read(buffer,sizeof(buffer));
  11.     in.close();
  12.         partition_table_struct partitions[4];

  13.         if (analyze_partition_table(partitions, &buffer[0x1BE])){
  14.                 cout << "有效分区表" << endl;
  15.                 show_logic_partition(partitions[0]);
  16.                 if(partitions[1].partition_type_id != 0x00){
  17.                         analyze_logic_partition(partitions[1].sector_pre);
  18.                 }
  19.         }else{
  20.                 cout << "无效分区表" << endl;
  21.         }

  22. }
复制代码
我对扩展分区求物理偏移量(相对于0 Cylinder 0 Header 0 Sector),然后在偏移量处取512个Byte

逻辑分区的地址也是在该扩展分区的物理偏移量处累加,每次也是获取512个Byte

但是这个偏移量是非常大的,大概在10^11-10^12之间
而 in.seekg(extended_partition_offset, ios::beg);
的第一个参数是long型。

我用的unsigned long long int型表示的extended_partition_offset
但是这样传参后还是以long型运算的,结果是超出了...

有什么办法对超大便宜的文件进行读取?请各位指教。
发表于 2010-2-16 12:48:56 | 显示全部楼层
俺没用过,不过貌似 win32 api 可以
http://msdn.microsoft.com/en-us/library/aa365541%28VS.85%29.aspx

GNU/Linux 有一个 lseek64(), 不过 windows 好像没有这个
回复

使用道具 举报

 楼主| 发表于 2010-2-17 11:16:08 | 显示全部楼层
多谢,哈哈,终于学会查看MSDN了,¥……%%……*英文
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-1-9 06:10 , Processed in 0.091179 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表