从扇区读数据写入到文件
假设某文件的数据从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],为什么
[解决办法]
动态申请空间不可以吗?
[解决办法]
最好读写放在循环中
[解决办法]
按字节一个一个读哦,太大内存放不下的