Los rincones del API Win32: El caché de WinInet - Consultar el contenido de una entrada del caché

8 - Consultar el contenido de una entrada del caché

[editar]
Tutorial creado por Juan Manuel. Extraido de: http://www.lawebdejm.com
30 de Noviembre de 1999
Una vez que conocemos los datos de una entrada del caché, podemos acceder al fichero donde se almacena dicha entrada, a través del atributo "lpszLocalFileName" de la estructura "INTERNET_CACHE_ENTRY_INFO". Con esta ruta de fichero, podemos manipularlo como queramos, abriéndolo, leyéndolo, etc.

Sin embargo, WinInet no recomienda esta técnica, ya que se podría perder la consistencia del caché. Para ello nos proporcionan una serie de funciones que hacen el trabajo por nosotros, para leer o modificar el contenido de una entrada del caché.

Para la lectura debemos hacer uso de la función "RetrieveUrlCacheEntryStream".

HANDLE RetrieveUrlCacheEntryStream( LPCTSTR lpszUrl, LPINTERNET_CACHE_ENTRY_INFO lpInformaciónEntrada, LPDWORD lpdwLongitudInformaciónEntrada, BOOL fLecturaAleatoria, DWORD dwReservado );

  • lpszUrl: la URL de la entrada que queremos leer.
  • lpInformaciónEntrada: un puntero a una estructura de tamaño variable de tipo INTERNET_CACHE_ENTRY_INFO.
  • lpdwLongitudInformaciónEntrada: un puntero a un valor de 32 bits que contiene el tamaño reservado para la estructura pasada en "lpInformaciónEntrada". Al retornar, la función copia en este parámetro el número de bytes copiados a la estructura.
  • fLecturaAleatoria: indica si se va a leer de forma aleatoria. En caso de indicar FALSE, la lectura debe hacerse secuencialmente.
  • dwReservado: debe ser 0.

La función retorna un descriptor del archivo abierto, que podemos utilizar en la función ReadUrlCacheEntryStream. En caso de error, se retornará NULL, y debemos llamar a GetLastError(), que podrá informarnos de los errores que ya conocemos: ERROR_FILE_NOT_FOUND y ERROR_INSUFFICIENT_BUFFER.

Una vez que el archivo está abierto, podemos leerlo con ReadUrlCacheEntryStream:

BOOL ReadUrlCacheEntryStream( HANDLE hDescriptorArchivo, DWORD dwPosición, LPVOID lpBuffer, LPDWORD lpdwLongitudBuffer, DWORD dwReservado );

  • hDescriptorArchivo: un descriptor obtenido con una llamada a RetrieveUrlCacheEntryStream.
  • dwPosición: indica la posición en la que queremos leer, pasando 0 si queremos leer desde el principio.
  • lpBuffer: un puntero a una zona de memoria donde se almacenarán los datos leídos. Para archivos cuyo contenido sea texto plano, podemos pasar un puntero a cadena de caracteres.
  • lpdwLongitudBuffer: un puntero a un valor de 32 bits que contiene la longitud de memoria de "lpBuffer". Al retornar, este valor contiene el número de bytes leído, o los bytes necesarios, si no se han podido copiar todos.
  • dwReservado: debe ser 0.

La función retorna TRUE o FALSE. En caso de error, GetLastError() nos informará del tipo de error, pudiendo ser ERROR_INSUFFICIENT_BUFFER si el tamaño pasado en "lpdwLongitudBuffer" es demasiado pequeño.

Una vez que hemos leído el contenido, debemos cerrar el descriptor del archivo a través de la siguiente función.

BOOL UnlockUrlCacheEntryStream( HANDLE hDescriptorArchivo, DWORD dwReservado );

Tan solo debemos pasar el descriptor obtenido con RetrieveUrlCacheEntryStream, y un cero en el segundo parámetro.
[editar]

Sé el primero en opinar


Tutoriales relacionados con 'Los rincones del API Win32: El caché de WinInet'

Damos una visión detallada de una de las características más interesantes de esta tecnología de... Más »
El protocolo FTP desde el API WinInet. Con este curso aprenderás a hacer un pequeño... Más »
Comienzo con un nuevo tema dentro dentro de la serie Los rincones del API Win32.... Más »
Entramos en temas interesantes: el acceso a recursos remotos a través del protocolo de aplicación... Más »
En el anterior curso dejamos muchos temas en el tintero, así que voy a terminar... Más »

Autor y licencia de 'Los rincones del API Win32: El caché de WinInet'


Tutorial de Juan Manuel. Extraido de: http://www.lawebdejm.com CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.