Programación General > C/C++

 Problema con SetFilePointer

<< < (2/2)

Eternal Idol:
¿Como? En bytes ya esta dado, en 4 (un DWORD) u 8 (dos DWORDs) segun sea la necesidad. Hexadecimal.

Ese desplazamiento que mencionas no es de mas de 4GB asi que seria con un solo parametro ... si lo que querias eran aprox. 6.2GB entonces seria asi: 0x1EAC1361E. Si te das cuenta el primer DWORD es equivalente a 3938530847=EAC1361F.

atapuerkasman:
Una última consulta, he encontrado un ejercicio propuesto cuyo enunciado es básicamente este:

un fichero de mas de 4Gb cuyo descriptor es HANDLE hFile, en win32. El puntero está colocado en alguna parte que desconocemos, y queremos colorcarlos 3 posiciones más atras de la actual

a mi lo que se me a ocurrido es:


--- Código: C++ ---DWORD posicion;posicion=SetFilePointer(hFile, 0, 0, FILE_CURRENT);posicion=posicion-3;SetFilePointer(hFile, posicion, 0, FILE_BEGIN); 
El problema lo encuentro, en que si tengo que usar la parte alta para meter el desplazamiento, como se podría hacer?????
o bastaría con poner en el 2º parametro un -3(ya que al ser de tipo LONG permite enteros con signo)??????

Eternal Idol:
En teoria: If lpDistanceToMoveHigh is NULL, lDistanceToMove is a 32-bit signed value. A positive value for lDistanceToMove moves the file pointer forward in the file, and a negative value moves the file pointer back.


--- Código: Text ---SetFilePointer(hFile, -3, 0, FILE_CURRENT); 
Sino, para hacerlo bien:


--- Código: Text ---LARGE_INTEGER dontMove;dontMove.QuadPart = 0;LARGE_INTEGER currentPos;SetFilePointerEx(hFile, dontMove, &currentPos, FILE_CURRENT);currentPos.QuadPart -= 3;SetFilePointerEx(hFile, currentPos, 0, FILE_CURRENT); 

atapuerkasman:
Muchas gracias, pero a nosotros nos pedían hacerlo con la función SetFilePointer.
Ya me he enterado de como se haría. si por ejemplo quieres ir 5 posiciones para atras respecto al puntero seria:

poner el 5 en binario:

0000 0000 0000 0000 0000 0000 0000 0101

se complementa:
1111 1111 1111 1111 1111 1111 1111 1010

y se le suma 1:


1111 1111 1111 1111 1111 1111 1111 1011

asi obtenemos el -5. Luego ya se le pasa normal en la parte baja...ej: 0xFFFFFFFB

 :good:  Muchas gracias por las respuestas

Eternal Idol:
Es mucho trabajo al pedo, -5 es ese numero exactamente  ^_^

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa