Tengo un problema a la hora de descargar contenido actualizado con urldownloadtofile.
He encontrado un hilo en otra web donde no han dado la solución y me preguntaba si alguien sabe la respuesta.
Muchas gracias.
url : http://www.clubdelph...4744#post424744
Tengo una Aplicación en Delphi, una de las cosas que hago es de descargar un archivo de una página web, lo hago con:
UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil)
....
Esto lo hago cada 5 mins. en un Timer, para que me refresque el contenido de dicho archivo que descargo(Porque Cada 5 Mins. Aprox. Cambia el Contenido), el problema que tengo que la PRIMERA VEZ que lo descarga lo hace Corrrectamente, pero de la Siguiente en Adelante NO REFRESCA el Contenido, si lo hago MANUALMENTE de ver el contenido del Archivo Accesando por medio del Internet Explorer veo el Contenido CORRECTAMENTE más sin embargo con la instrucción UrlDownloadToFile no funciona correctamente, de la segunda en adelante siempre muestra el contenido de la PRIMERA VEZ que Descargo el archivo, ya hice que borrará el archivo despues de leer el contenido, pero no funcionó, me hace pensar que no lo hace directamente de la Página WEB, es como si en la segunda vez en adelante lo leyera del buffer de la memoria.....
Nota: Tengo que Cerrar y Volver Abrir mi Aplicación para poder que TOME el Contenido Actualizado Correctamente.
Agradezco cualquier sugerencia.

Refrescar el UrlDownloadToFile
Comenzado por
petete2008
, feb 10 2012 06:26
4 respuestas en este tema
#1
Escrito 10 febrero 2012 - 06:26
#2
Escrito 10 febrero 2012 - 06:38
Lo resolvi 

delphi
function DownloadToFile(URL, FileName: String): Boolean; var lpszFile: Array [0..MAX_PATH] of Char; begin // Download to cache by getting newest version if (URLDownloadToCacheFile(nil, PChar(URL), @lpszFile, MAX_PATH, BINDF_GETNEWESTVERSION, nil) = S_OK) then // Copy to desired file name result:=CopyFile(@lpszFile, PChar(FileName), False) else // Failed result:=False; end;
#3
Escrito 10 febrero 2012 - 07:34
Quizás estos enlaces dentro de DA sean de interés y completen el hilo:
1.- Cómo resumir una descarga. Donde se muestra a bajo nivel como descargar grandes archivos y retomar la misma si se interrumpe.
2.- Mostrar una Imagen desde una URL: LoadURLImage. Donde se muestra como descargar y mostrar un archivo de imagen usando la API URLDownloadToFile. Este ejemplo se puede extender a cualquier tipo de archivo que se quiera descargar.
Saludos.
1.- Cómo resumir una descarga. Donde se muestra a bajo nivel como descargar grandes archivos y retomar la misma si se interrumpe.
2.- Mostrar una Imagen desde una URL: LoadURLImage. Donde se muestra como descargar y mostrar un archivo de imagen usando la API URLDownloadToFile. Este ejemplo se puede extender a cualquier tipo de archivo que se quiera descargar.
Saludos.
#4
Escrito 12 marzo 2012 - 02:11
¿alguien conoce como ponerle un indicador de proceso (progressbar)?
Gracias
Gracias
Lo resolvi
delphi
function DownloadToFile(URL, FileName: String): Boolean; var lpszFile: Array [0..MAX_PATH] of Char; begin // Download to cache by getting newest version if (URLDownloadToCacheFile(nil, PChar(URL), @lpszFile, MAX_PATH, BINDF_GETNEWESTVERSION, nil) = S_OK) then // Copy to desired file name result:=CopyFile(@lpszFile, PChar(FileName), False) else // Failed result:=False; end;
#5
Escrito 14 marzo 2012 - 08:04
Siguiendo tu función, debes implementar una clase derivada de la interface IBindStatusCallback para aprovecharte de la función OnProgress
Pe pongoo un ejemplo de como hacerlo:
Ejemplo de uso:
Saludos.
Pe pongoo un ejemplo de como hacerlo:
delphi
uses Urlmon, ActiveX; type TIBindStatusCallback = class(TObject, IBindStatusCallback) ProgressBar: TProgressBar; function OnLowResource(reserved: DWORD): HResult; stdcall; function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; stdcall; function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall; function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall; function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc; stgmed: PStgMedium): HResult; stdcall; function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall; function GetPriority(out nPriority): HResult; stdcall; function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall; function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; end; function TIBindStatusCallback.OnLowResource(reserved: DWORD): HResult; begin end; function TIBindStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; stdcall; begin ProgressBar.Max:= ulProgressMax; ProgressBar.Position:= ulProgress; ProgressBar.Update; end; function TIBindStatusCallback.OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall; begin end; function TIBindStatusCallback.OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall; begin end; function TIBindStatusCallback.OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc; stgmed: PStgMedium): HResult; stdcall; begin end; function TIBindStatusCallback.OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall; begin end; function TIBindStatusCallback.GetPriority(out nPriority): HResult; stdcall; begin end; function TIBindStatusCallback.GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall; begin end; function TIBindStatusCallback.QueryInterface(const IID: TGUID; out Obj): HResult; begin end; function TIBindStatusCallback._AddRef: Integer; begin end; function TIBindStatusCallback._Release: Integer; begin end; function DownloadToFile(URL, FileName: String; ProgressBar: TProgressBar): Boolean; var lpszFile: Array [0..MAX_PATH] of Char; BindStatusCallback: TiBindStatusCallback; begin ProgressBar.Position:= 0; BindStatusCallback:= TIBindStatusCallback.Create(); BindStatusCallback.ProgressBar:= ProgressBar; // Download to cache by getting newest version if (URLDownloadToCacheFile(nil, PChar(URL), @lpszFile, MAX_PATH, BINDF_GETNEWESTVERSION, BindStatusCallback) = S_OK) then // Copy to desired file name result:=CopyFile(@lpszFile, PChar(FileName), False) else // Failed result:=False; BindStatusCallback.Free; end;
Ejemplo de uso:
delphi
procedure TForm1.Button2Click(Sender: TObject); begin DownloadToFile(URL, 'File.jpg', ProgressBar1); end;
Saludos.