首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

从扇区读数据写入到文件,该如何解决

2012-02-04 
从扇区读数据写入到文件假设某文件的数据从3122391扇区开始,长度为83456,即结尾为扇区3205847要从3122391

从扇区读数据写入到文件
假设某文件的数据从3122391扇区开始,长度为83456,即结尾为扇区3205847
要从3122391扇区读到扇区3205847,把扇区的数据写入文件
我的方法是这样的:
BYTE   bBufferRead36M[1024*1024*36]   =   {0}   ;//存放36M的数据

unsigned   __int   64   rBegin=3122391;
unsigned   __int   64   rSize=83456;

LARGE_INTEGER   distance;
distance.QuadPart   =   rBegin   *   512;
HANDLE   hDisk   ;
      DWORD   dwReadByte3;   //读了多少BYTE,无用的


  hDisk   =   CreateFile   (   pDiskPath,   GENERIC_READ,   \
      FILE_SHARE_READ|FILE_SHARE_WRITE,   NULL,   OPEN_EXISTING,   0,   0   )   ;


  SetFilePointer   (   hDisk,   distance.LowPart,   &distance.HighPart,   FILE_BEGIN   )   ;
  DWORD   dwReadByte   ;
  ReadFile   (   hDisk,   (LPVOID)bBufferRead36M,   rSize,   &dwReadByte3,   NULL   )   ;
  //LPVOID是一个没有类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量
  //(一般作为参数传递),然后在使用的时候在转换回来

  CloseHandle   (   hDisk   )   ;
  HANDLE   myHANDLE   =   CreateFile(fileName.c_str(),//文件名
  GENERIC_WRITE,
  FILE_SHARE_WRITE,
  NULL,
  OPEN_ALWAYS,
  FILE_ATTRIBUTE_NORMAL,
  NULL);
DWORD   byteswrite3;
WriteFile(myHANDLE,
bBufferRead36M,
rSize,
&byteswrite3,
NULL);

CloseHandle(myHANDLE);


1   这样可以得到要的文件,但问题是,这样的话生成的程序有37兆(应该于BYTE   bBufferRead36M[1024*1024*36]有关),应该怎么解决呢?
2   文件的数据在第一个分区时是没问题的,如果文件数据在第二个分区,我确定文件的起始扇区和文件的长度都是对的,但得出的文件的内容全部是0(用winhex看的),这又是为什么呢?
3   如果文件的数据分成两块或三块,不用BYTE   bBufferRead36M[1024*1024*36]应该怎么做呢
4   貌似在上面的程序中申请超过50M的内存时会报错,如:BYTE   bBufferRead50M[1024*1024*55],为什么



[解决办法]
动态申请空间不可以吗?
[解决办法]
最好读写放在循环中
[解决办法]
按字节一个一个读哦,太大内存放不下的

热点排行