Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-03-2007
papu24ar papu24ar is offline
Miembro
 
Registrado: abr 2006
Posts: 10
Poder: 0
papu24ar Va por buen camino
Actualizar Archivos Desde FTP

Bueno la idea es actualizar un programa.. basicamente buscando en el foro lo q encontre es como actualizar el ejecutable del programa yo lo que quiero es actualizar archivos ajenos al ejecutable.. tengo lo de la lectura del txt y si da distinta vercion sigue la actualizacion y si es la misma ahi se frena... eso lo entendi y lo pude hacer funiconar.. lo q yo kiero es:

1. que lea el archivo ese
2. si es distinta vercion que siga la actualizacion
3. q se conecte a una carpeta de el ftp por ejemplo ftp:\\misitio.com\prueba1\ y descargue todo el contenido tanto carpetas como sub carpetas
4. que copie los archivos descargados a la ruta donde esta el programa remplazando los anteriores

la idea seria mas o menos esa.. si me pueden echar una mano les agradeceria encontre por ahi un ejemplo con winzip pero no me gusto por q casi nadie usa winzip casi todos le dan al winrar y eso...
Responder Con Cita
  #2  
Antiguo 19-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Busca en los foros. Link.
El tema de la actualización de programas ya se ha tratado varias veces. En los hilos también recuerdo que hay códigi, así que tal vez ya tengas resuelto el problema.

En la sección de Trucos, tienes el 55 (se Seoane) que también puede ser que te sea útil.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 20-03-2007
papu24ar papu24ar is offline
Miembro
 
Registrado: abr 2006
Posts: 10
Poder: 0
papu24ar Va por buen camino
si osea.. ya los habia visto pero keria hacerlo por ftp y descargar fila por fila.. no un solo zip.. pero ya lo solucione eso.. ahora lo que me gustaria que me dijeran es como hago para ponerle un progress bar a este codigo para saber cuando se completa la descarga y si se puede saber la velocidad de descarga. por que me vengo kemando la cabeza desde ayer mirando ejemplos y todo pero no entiendo :S (Sorry soy bastante nuevo)

Código:
Código Delphi [-]
procedure TfMenu.chk_nuevas_versionesClick(Sender: TObject);
// poner en uses:  WinInet, Registry, WinSock, StrUtils,  urlMon;
var
 vInst:string;      // almacena la versión instalada en el PC
 dir_exe:String;    // carpeta desde la que se ejecuta el *.exe
 dir_tmp:String;    // carpeta temporal, utilizada para descargar los ficheros
 fic_web_txt:String;// ruta para descargar fichero txt con la versión
 fic_pc_txt:String; // ruta en el pc donde se ha descargado fichero txt con la versión
 fic_web_zip:String;// ruta para descargar fichero ZIP con la actualización
 fic_pc_zip:String; // ruta en el pc donde se ha descargado fichero ZIP con la actualización
 params:string;     // parametros utilizados para decir a WINZIP como descargar el fichero
 nom_apli:String;   // nombre de la aplicación
 msg:string;        // variable para almacenar los mensajes
 b:Boolean;
 TS:TStrings;       // TStringList creada para leer el fichero
 Str:String;        // versión instalada en el Servidor
 fec:String;        // fecha de la nueva versión
 titulo:String;
 //----------------------------------------------------------------------------
 function DownloadFile(Source, Dest: string): Boolean;// función para descargar
  begin
    try
      Source := AnsiReplaceStr(Source, '/', '\');
      Result := UrlDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil) = 0;
    except
      Result := False;
    end;
  end;
 //----------------------------------------------------------------------------
 function  GetAppVersion:string; // función para obtener la versión instalada
   var
    Size, Size2: DWord;
    Pt, Pt2: Pointer;
   begin
     Size := GetFileVersionInfoSize(PChar (ParamStr (0)), Size2);
     if Size > 0 then
     begin
       GetMem (Pt, Size);
       try
          GetFileVersionInfo (PChar (ParamStr (0)), 0, Size, Pt);
          VerQueryValue (Pt, '\', Pt2, Size2);
          with TVSFixedFileInfo (Pt2^) do
          begin
            Result:= IntToStr (HiWord (dwFileVersionMS)) + '.' +
                     IntToStr (LoWord (dwFileVersionMS)) + '.' +
                     IntToStr (HiWord (dwFileVersionLS)) + '.' +
                     IntToStr (LoWord (dwFileVersionLS));
         end;
       finally
         FreeMem (Pt);
       end;
     end;
   end;
  //----------------------------------------------------------------------------
begin


// ini: Solo se deben modificar estas variables para adaptarlas a nuestra aplicación
  nom_apli   := 'VISOR';
  dir_tmp    := 'c:\temp';
  fic_web_txt:= 'http://www.paginaweb.es/ficheros/version_visor.txt';
  fic_pc_txt := 'c:\temp\version_visor.txt';
  fic_web_zip:= 'http://www.paginaweb.es/ficheros/visor_act.zip';
  fic_pc_zip := 'c:\temp\visor_act.zip';
  params     := '-e -o '+fic_pc_zip;  // -e = extract -o = sobreescribir
// fin: 

//    notas sobre parametros pasados al Winzip
//    -a add/replace files
//    -e extract /descomprimir ficheros
//    -f actualiza ficheros en destino
//    -t test archive
//    -o  no pregunta si queremos sobreecribir el fichero

  vInst:= GetAppVersion;                 // obtener la versión instalada
  dir_exe:=ExtractFilePath(paramstr(0)); // el directorio del ejecutable a actualizar

  If not DirectoryExists(dir_tmp) then
   if not createdir(dir_tmp) then
    begin
    raise exception.create('Proceso cancelado al no poder creárse la carpeta '+dir_tmp);
    exit;
    end;
  // descargamos el fichero de texto con información de la última versión
  b := DownloadFile(fic_web_txt,fic_pc_txt);

  if (b) then begin
    TS := TStringList.Create();
    TS.LoadFromFile(fic_pc_txt);
    Str := TS[0];// 1º linea del fichero, poner la versión del programa, ejem. 6.1.0.2
    fec := TS[1];// 2º linea del fichero, poner la fecha de la versión,  ejem. 14-11-2006
    TS.Free;
    DeleteFile(fic_pc_txt);
    msg:= 'Versión en este ordenador: '+ vInst+#13+
          'Versión en el Servidor____: ' + Str+' de '+fec;

          if vInst<>Str then  // si las versiones son distintas
          begin
          msg:=msg+#13+#13+'Quieres descargar la nueva versión';

         titulo:='Descargar actualización '+nom_apli;
         if application.MessageBox (pchar(msg),
         PCHAR(titulo),
         (MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION)) <> IDYES then exit;

          DownloadFile(fic_web_zip,fic_pc_zip);

          msg:=  'Ha descargado la nueva actualización, '+#13+
                 'al directorio '+dir_tmp+', para instalarla'+#13+
                 'en su ordenador no debe haber ningún'+#13+
                 'usuario conectado a la aplicación.'+#13+#13+
                 'Quiere instalar la nueva versión';

          titulo:='Actualizar '+nom_apli;
          if application.MessageBox (pchar(msg),
             PCHAR(titulo),
             (MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION)) <> IDYES then exit;
                 begin
                 ShellExecute(Handle, 'Open', 'WinZip32.exe', PCHAR(params), PCHAR(dir_exe), SW_NORMAL);
                 Application.Terminate;
                 end;
          end
          else
  Application.MessageBox((pChar(msg+#13+#13+'NO HAY NUEVAS ACTUALIZACIONES')) , 'Comprobación versiones', MB_ICONEXCLAMATION) ;
end
else
  ShowMessage('Esta comprobación solo se puede hacer'+#13+
              'en ordenadores conectados a Internet.'+#13+
              'Su equipo no tiene esta conexión'+#13+
              '- Proceso Cancelado -');
end;
Muchas Gracias por toda su ayuda
Responder Con Cita
  #4  
Antiguo 20-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por papu24ar
ahora lo que me gustaria que me dijeran es como hago para ponerle un progress bar a este codigo para saber cuando se completa la descarga y si se puede saber la velocidad de descarga.
Usando UrlDownloadToFile no puedes, ya que la función no termina hasta que se ha bajado todo el archivo. Para eso tienes que usar Indy o Wininet.

Por ejemplo en el truco 55 del que te hablo Neftali, en la parte que aparece comentada la sentencia "Application.ProcessMessages", insertas el código necesario para actualizar una barra de progreso y descomentas el "Application.ProcessMessages". Para actualizar la barra y determinar la velocidad solo tienes que tener en cuenta los bytes descargados y el tiempo transcurrido.
Responder Con Cita
  #5  
Antiguo 21-03-2007
papu24ar papu24ar is offline
Miembro
 
Registrado: abr 2006
Posts: 10
Poder: 0
papu24ar Va por buen camino
Cita:
Empezado por seoane
Usando UrlDownloadToFile no puedes, ya que la función no termina hasta que se ha bajado todo el archivo. Para eso tienes que usar Indy o Wininet.

Por ejemplo en el truco 55 del que te hablo Neftali, en la parte que aparece comentada la sentencia "Application.ProcessMessages", insertas el código necesario para actualizar una barra de progreso y descomentas el "Application.ProcessMessages". Para actualizar la barra y determinar la velocidad solo tienes que tener en cuenta los bytes descargados y el tiempo transcurrido.
mira estube mirando el codigo ayer.. y hoy estube analizando como poner el progressbar.. la verdad no encontre informacion al respecto y lo unico q se me ocurre es lo siguiente..

procedure TForm1.Button1Click(Sender: TObject);
var
Buffer: array[0..10240] of Char;
BytesRead: DWORD;
BytesWritten: DWORD;
begin
Bajar('
http://www.tusitio.com\1.jpg','d:\1.jpg');
ProgressBar1.Max := sizeof(Buffer);
ProgressBar1.Position := BytesRead;
end;

y funciona.. pero osea la barra se mantiene vacia y se completa cuando finaliza la descarga :S si me podrias echar una ayudita te lo agredeceria demaciado.. y disculpa mi insistencia.. pasa q soy bastante novato

sorry
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar un valor en un generador desde un Sp muli Firebird e Interbase 16 11-06-2008 14:56:05
Actualizar Bases MySQL desde Delphi7 Marciano Conexión con bases de datos 2 18-10-2006 19:28:46
Actualizar página Web desde Delphi 5.0 Luis F. Orjuela Internet 0 27-07-2006 18:48:59
Actualizar tabla buscando desde un dbgrid judit25 Conexión con bases de datos 7 19-05-2006 16:08:57
Actualizar Paradox desde Internet chozas Tablas planas 4 20-05-2003 20:25:03


La franja horaria es GMT +2. Ahora son las 11:50:08.


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
Copyright 1996-2007 Club Delphi