SetFilePointer как сдвинуть указатель чтения больше чем на 2Гбайт?

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 24 июн 2009.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Код (Text):
    1. #include <windows.h>
    2. #include <stdlib.h>
    3. #include <iostream>
    4. #include <conio.h>
    5. using namespace std;
    6. int _tmain(int argc, _TCHAR* argv[])
    7. {
    8.     HANDLE hh=GetProcessHeap();
    9.     ULARGE_INTEGER TNOFB;
    10.     DWORD rb,wb;unsigned long curpos=0;
    11.     char *buf=(char*)HeapAlloc(hh,HEAP_ZERO_MEMORY,(1024*1024)*10);
    12.     char dsk[35],dd[5],buff[1024];
    13.     strcpy(dsk,"\\\\.\\");
    14.     cout<<"DISK name:"<<endl;
    15.     cin>>dd;strcat(dsk,dd);
    16.     HANDLE d=CreateFile(dsk,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,NULL);
    17.     if(d==INVALID_HANDLE_VALUE){cout<<dsk<<" oups :("<<endl;goto End;}
    18.     HANDLE f=CreateFile("D:\\dump.iso",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_FLAG_RANDOM_ACCESS,NULL);
    19.     GetDiskFreeSpaceEx(dd,0,&TNOFB,0);
    20.     wsprintf(buff,"%I64u",TNOFB.QuadPart);
    21.     cout<<"ds:"<<buff;
    22.     for(;;)
    23.     {
    24.         ReadFile(d,buf,(1024*1024)*10,&rb,NULL);
    25.         system("cls");
    26.         if(rb==0){break;}
    27.         curpos=curpos+rb;
    28.         cout<<curpos<<endl<<"FROM:"<<endl<<buff;
    29.         SetFilePointer(d,curpos,NULL,FILE_BEGIN);
    30.         WriteFile(f,buf,rb,&wb,0);
    31.     }
    32.     CloseHandle(d);
    33.     CloseHandle(f);
    34.     cout<<"DONE";
    35. End:
    36.     getch();
    37.     HeapFree(hh,0,buf);
    38.     return 0;
    39. }
    В гугле ничего толкового с рабочими примерами, немогу найти по этому вопросу :dntknw:
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    http://msdn.microsoft.com/en-us/library/aa365542(VS.85).aspx ?
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    См. 3-й параметр - lpDistanceToMoveHigh
     
  4. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Я тупой мне без примера непонятен алгоритм ,расчета этой новой точки.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    LARGE_INTEGER DistanceToMove;
    DistanceToMove.QuadPart = 0x12345678ABCD;
    SetFilePointer (hFile, DistanceToMove.LowPart, &DistanceToMove.HighPart, FILE_BEGIN);
     
  6. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    или SetFilePointerEx
     
  7. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Код (Text):
    1. curpos.QuadPart=curpos.QuadPart+rb;
    Ошибка выходит :dntknw:
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    _nic
    ну господи. какая?
     
  9. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    "Run-Time Check Failure #3 - The variable 'curpos' is being used without being initialized."
     
  10. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Гугл помог разобратся.Только вот придостижение числа байт около 3х гигабайт происходит вылет
    Причем указывает опять же на строчку "curpos.QuadPart=curpos.QuadPart+rb;" ,неужели ~3.2 Гбайта много для LARGE_INTEGER ??
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    А в файле то они есть эти 3,2Гб? ;)
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Горе ты луковое, ты сорс дашь? Или нам гадать, что вокруг строчки этой?