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 20-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por delphi.com.ar Ver Mensaje
Mmmmm.. si compraras las versiones "1.1.0.10" contra "10.0.0.0" te dirá que la primera es mayor.

Si ya tienes armado el string, simplemente tienes que descomponerlo en números separándolo por los puntos y comparar parte a parte, mientras sean iguales de izquierda a derecha, en cuanto un valor es superior al otro, ya tienes identificado cual es la versión mayor.

Pero pregunto... este valor lo estas obteniendo con la winapi GetFileVersionInfo?... porque de ser así puedes comparar directamente los resultados de la misma.

Saludos!
Pues si ... Federico...tienes toda la razon...me parece que no tomé en cuenta eso..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #2  
Antiguo 20-01-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.938
Poder: 27
delphi.com.ar Va por buen camino
Ok!.. fíjate que internamente la función VersionExe utiliza la winapi GetFileVersionInfo a la cual hice referencia. También terminas obteniendo un registro del tipo TVSFixedFileInfo con dos valores que luego descompones en cuatro. Yo lo que digo es utilizar esos dos valores sin pasarlos a string, es algo mucho mas óptimo ya que se trata de únicamente dos evaluaciones aritméticas por cada comparación.

Hice esto, está sin probar:

Código Delphi [-]
function GetFileInfo(AFileName: PChar): TVSFixedFileInfo;
var
  dwSize, dwSize2: DWORD;
  lpData, lpData2: Pointer;
begin
  ZeroMemory(@Result, SizeOf(TVSFixedFileInfo));
  if FileExists(AFileName) then
  begin
    dwSize := GetFileVersionInfoSize(AFileName, dwSize2);
    if dwSize > 0 then
    begin
      GetMem(lpData, dwSize);
      try
        GetFileVersionInfo(AFileName, 0, dwSize, lpData);
        VerQueryValue(lpData, '\', lpData2, dwSize2);
        Move(lpData2^, Result, dwSize2);
      finally
        FreeMem(lpData);
      end;
    end;
  end;
end;


function GetFileVersion(AFileName: string): string;
begin
  with GetFileInfo(PChar(AFileName)) do
    Result:= Format('%d.%d.%d.%d', [HiWord(dwFileVersionMS),
                                    LoWord(dwFileVersionMS),
                                    HiWord(dwFileVersionLS),
                                    LoWord(dwFileVersionLS)] );
end;

function CompareFileVersions(AFileName1, AFileName2: string): Integer;
var
  FileInfo1, FileInfo2: TVSFixedFileInfo;
begin
  FileInfo1 := GetFileInfo(PChar(AFileName1));
  FileInfo2 := GetFileInfo(PChar(AFileName2));

  Result := CompareValue(FileInfo1.dwFileVersionMS, FileInfo2.dwFileVersionMS);

  if Result = 0 then
    Result := CompareValue(FileInfo1.dwFileVersionLS, FileInfo2.dwFileVersionLS);
end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 20-01-2010 a las 19:41:31. Razón: Correciones en la redacción
Responder Con Cita
  #3  
Antiguo 20-01-2010
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
muchas gracias por tu interes lo intentare probar y adaptar,
el problema es que uno de los dos valores lo saco de un fichero de texto que descargo de una web, osea no quiero comparar dos ficheros locales, si no la version del ejecutable en curso con un string con el contenido de la ultima version. No se si con esto seria mas sencillo o mas complicado.
Pero la verdad es que no pensaba liarme tanto.

Al final igual me creo un valor de versión simple que vaya aumentando sin más, sin puntos ni historias y sin tener en cuenta la version real que marca el ejecutable y me olvido de complicaciones.
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
Fecha de mayor a menor alcides Varios 2 15-02-2008 16:46:09
Que versión de php necesito para que funcione en mi server lo que hago el Delphi4php cooper PHP 3 01-05-2007 04:21:46
como puedo hacer para cambiar un archivo de excel con versión 2.1 a versión 8.0 RONPABLO Servers 4 23-01-2006 06:02:38
Me hago mayor? Me invento las cosas? Soy autosugestionable? papulo Varios 6 11-11-2005 21:37:07
ordenar un DBGrid de mayor a menor jmlifi Varios 2 03-11-2005 16:36:34


La franja horaria es GMT +2. Ahora son las 01:16: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