Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Copiar/Descargar Archivo en Página Web (https://www.clubdelphi.com/foros/showthread.php?t=15097)

AGAG4 09-10-2004 21:56:43

Copiar/Descargar Archivo en Página Web
 
Alguien sabe como Copiar un Archivo de Texto ubicado en una página web, por ejemplo: www.MiPagina.com/cgi-bin/Articulos.txt
Hice pruebas con el Componente WebBrowser me visualiza el archivo de texto poniendo estas lineas de codigo:
Código Delphi [-]
procedure WBFindDialog(AWebBrowser: TWebbrowser) ;
const
CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
HTMLID_FIND = 1;
var
CmdTarget : IOleCommandTarget;
vaIn, vaOut: OleVariant;
PtrGUID: PGUID;
begin
New(PtrGUID) ;
PtrGUID^ := CGID_WebBrowser;
if AWebBrowser.Document <> nil then
try
AWebBrowser.Document.QueryInterface(IOleCommandTarget, CmdTarget) ;
if CmdTarget <> nil then
try
CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut) ;
finally
CmdTarget._Release;
end;
except
end;
Dispose(PtrGUID) ;
end;
El unico inconveniente es de que no puedo hacer nada sólo visualizarlo, no puedo leer el contenido por Lineas, o bien que tenga alguna propiedad de Guardarlo como un "SaveToStream".

Alguna sugerencia se los agradezco.
Si saben de algún otro componente que pueda Bajarme este archivo de texto se los agradecería mucho.

Julián 11-10-2004 00:59:04

Tenias la solución en esta misma web en la sección trucos:
http://www.clubdelphi.com/vertruco.php?id=11


¡saludos!

Neftali [Germán.Estévez] 11-10-2004 15:50:18

En la Unit URLMon.pas (D6 al menos) tienes un método llamado UrlDownloadToFile; Lo puedes utilizar de la siguiente forma:

Código Delphi [-]
  Source := 'www.MiPagina.com/cgi-bin/Articulos.txt';
  Dest := 'c:\temp\Articulos.txt';
  Source := AnsiReplaceStr(Source, '/', '\');
  Result := UrlDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil) = 0;

AGAG4 11-10-2004 16:52:12

En el link de Julian Me marcan varios errores el principal una variable Pointer que esta mal declarada pero si la corrigo me saltan otras más, no copiaron bien el código y ni explican bien que significan varios parámetros que contienen en dicho código y en cuanto al Código de Neftali lo estoy checando e investigando para enriquecerlo más... Gracias de antemano, que tengan buen día.

marcoszorrilla 11-10-2004 17:03:50

He hecho un par de cambios en el link que publica Julián y me funciona correctamente:
Código Delphi [-]
  unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls,Wininet;
  
    function LeerUnTrozoDeDocumentoHtmDesdeInternet( sUrl: string): string;
  type
    TForm1 = class(TForm)
      Button1: TButton;
      Memo1: TMemo;
      procedure Button1Click(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;
  
  var
    Form1: TForm1;
  
  implementation
  
  {$R *.DFM}
  
  function LeerUnTrozoDeDocumentoHtmDesdeInternet( sUrl: string): string;
  type
    tbuffer    = array[0..100] of char;  // Aqui es donde
  puedes poner mas grande el buffer
    pbuffer    = ^TBuffer;
  var
    buffer     : pBuffer;
    a          : cardinal;
    ihConnect,
    ihSession,
    iDocument  : HINTERNET;
  begin
    Result:='NadaDeNada';  // Observa que Length(Result)=10
    ihConnect:=InternetOpen('dChat/2.0 (JulianWEB)',  LOCAL_INTERNET_ACCESS, '', '', 0);
    iDocument:=InternetOpenURL(ihConnect, pChar(sUrl), NIL, 1,
  INTERNET_FLAG_RELOAD or INTERNET_FLAG_DONT_CACHE or INTERNET_FLAG_RAW_DATA, 0);
    if iDocument<>nil then try
      New(buffer);
      InternetReadFile(iDocument, Buffer, sizeof(TBuffer), a);
      Result:=pchar(buffer);
    finally
      internetCloseHandle(iDocument);
      Dispose(buffer);
      InternetCloseHandle(ihConnect);
    end;
  end;
  procedure TForm1.Button1Click(Sender: TObject);
  begin
  Memo1.text:=LeerUnTrozoDeDocumentoHtmDesdeInternet('http://www.clubdelphi.com');
  end;
  
  end.

Un Saludo.

AGAG4 11-10-2004 17:26:42

Muchas Gracias Sr. MarcosZorrilla, lo voy a probar, pero también ya encontre otra Solución si alguien le intereza a continuación la describo:
Código Delphi [-]
Uses ..UrlMon,ShellApi;

//Agregen un Boton y un Memo en la forma 
procedure TForm1.BitBtn1Click(Sender: TObject);
const
  SourceFile = 'http://www.MiPagina.com/cgi-bin/MiArchivo.txt';
  DestFile = 'c:\Descargas\tmp\MiArchivo.txt';
begin
  if DownloadFile(SourceFile, DestFile) then
  begin
    ShowMessage('Se bajo con Éxito el Archivo!!!!');
    Memo1.Lines.LoadFromFile('c:\Descargas\tmp\MiArchivo.txt');
  end
  else
    ShowMessage('Error mientras se Bajaba el Archivo ' + SourceFile)
end;

Espero les sirvan.
Saludos


La franja horaria es GMT +2. Ahora son las 08:05:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi