Programación General > C/C++

 Problema con SetFilePointer

(1/2) > >>

atapuerkasman:
Saludos!!!Soy nuevo en esta página y me gustaría saber si alguien me puede ayudar con un pequeño problema que tengo.

Estoy trabajando utilizando la funcion de SetFilePointer para desplazar el puntero en archivos. Esta es la declaración de la función:

--- Código: C++ ---DWORD SetFilePointer( HANDLE hFile, LONG lDistanceToMove,                      LPLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); 
Hasta ahora no había encontrado ningún problema con ella, pero tengo que hacer un desplazamiento de mas de 4gb y no se como utilizar lpDistanceToMoveHigh. Como no se si me estoy explicando voy a poner un ejemplo:

Me gustaria realizar un desplazamiento de 0x122394CACA con respecto al inicio. Suponiendo el siguiente manejador de fichero HANDLE fFile, como se haria????????alguien me puede exar una mano???


Muchas gracias

Eternal Idol:
Probalo pero estoy casi seguro que es asi:


--- Código: Text ---LONG highDistance = 0x12;SetFilePointer(hFile, 0x2394CACA, &highDistance, FILE_BEGIN); 
Cualquier cosa usa esta funcion que viene en la MSDN:


--- Código: Text ---__int64 myFileSeek (HANDLE hf, __int64 distance, DWORD MoveMethod){   LARGE_INTEGER li;    li.QuadPart = distance;    li.LowPart = SetFilePointer (hf,                                 li.LowPart,                                 &li.HighPart,                                 MoveMethod);    if (li.LowPart == INVALID_SET_FILE_POINTER && GetLastError()        != NO_ERROR)   {      li.QuadPart = -1;   }    return li.QuadPart;} 

atapuerkasman:
Muchas gracias!!!!! La 1ª solución que me diste me vale. El problema lo tenía en que no sabía como tratar un desplazamiento tan grande y había leido el comportamiento de la función pero no me acababa de quedar claro como se implementaría.

Ahora es bastante lógico, dado un desplazamiento grande las 8 primeras cifras se corresponden a 32 bytes (2^8=256 bits, 256/8=32 bytes) y el resto se pasa con la parte alta. :good:

Eternal Idol:
De nadas  B) Igual despues puse las dos juntas y lo depure para comprobar que pasaban los mismos parametros  :good:

atapuerkasman:
Otra pregunta, esta vez por curiosidad. Si en lugar de pasarte el desplazamiento en hexadecimal te lo dan en bytes????
por ejemplo te dicen que el tamaño del archivo es superior a los 4Gb, y un desplazamiento mayor de 2,2Gb(redondeando xDDD).
¿eso como se implementaría? utilizando el SetFilePointer
por ejemplo, con un desplazamiento de: 3938530847

Muchas gracias!!!!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa