Код (Text): #include <windows.h> #include <stdlib.h> #include <iostream> #include <conio.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { HANDLE hh=GetProcessHeap(); ULARGE_INTEGER TNOFB; DWORD rb,wb;unsigned long curpos=0; char *buf=(char*)HeapAlloc(hh,HEAP_ZERO_MEMORY,(1024*1024)*10); char dsk[35],dd[5],buff[1024]; strcpy(dsk,"\\\\.\\"); cout<<"DISK name:"<<endl; cin>>dd;strcat(dsk,dd); HANDLE d=CreateFile(dsk,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,NULL); if(d==INVALID_HANDLE_VALUE){cout<<dsk<<" oups :("<<endl;goto End;} HANDLE f=CreateFile("D:\\dump.iso",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_FLAG_RANDOM_ACCESS,NULL); GetDiskFreeSpaceEx(dd,0,&TNOFB,0); wsprintf(buff,"%I64u",TNOFB.QuadPart); cout<<"ds:"<<buff; for(;;) { ReadFile(d,buf,(1024*1024)*10,&rb,NULL); system("cls"); if(rb==0){break;} curpos=curpos+rb; cout<<curpos<<endl<<"FROM:"<<endl<<buff; SetFilePointer(d,curpos,NULL,FILE_BEGIN); WriteFile(f,buf,rb,&wb,0); } CloseHandle(d); CloseHandle(f); cout<<"DONE"; End: getch(); HeapFree(hh,0,buf); return 0; } В гугле ничего толкового с рабочими примерами, немогу найти по этому вопросу
LARGE_INTEGER DistanceToMove; DistanceToMove.QuadPart = 0x12345678ABCD; SetFilePointer (hFile, DistanceToMove.LowPart, &DistanceToMove.HighPart, FILE_BEGIN);
Гугл помог разобратся.Только вот придостижение числа байт около 3х гигабайт происходит вылет Причем указывает опять же на строчку "curpos.QuadPart=curpos.QuadPart+rb;" ,неужели ~3.2 Гбайта много для LARGE_INTEGER ??