Porównanie wersji programu

0

Hej,

Chciałbym zapytać czy taki if prawidłowo zanalizuje/porówna wersje

    bool bNeedUpdate = false;

    if (iCurrentMajor < iAvailableMajor)
        bNeedUpdate = true;
    else
    {
        if (iCurrentMinor < iAvailableMinor)
            bNeedUpdate = true;
        else
        {
            if (iCurrentPatch < iAvailablePatch)
                bNeedUpdate = true;
        }
    }
0

Nie.

Rozwijając tę w pełni logiczną i zupełnie bezużyteczną odpowiedź, co będzie gdy program ma wersję 2.0.0 a do aktualizacji próbujesz wziąć 1.4.1.

0

Obuduj to sobie w klasę Version i przeładuj operatory < > = .

0
Zjarek napisał(a)

co będzie gdy program ma wersję 2.0.0 a do aktualizacji próbujesz wziąć 1.4.1.

Niejasno sformułowałeś odpowiedź... Myślę, że chodzi Ci o to, że co będzie, gdy aplikacja na dysku jest w wersji np. 2.0.0, a najnowsza wersja aplikacji na serwerze ma numer np. 1.4.1; Taka sytuacja nie może zaistnieć, bo skąd się na dysku wzięła nowsza, niż jest na serwerze? Trochę to dziwne, w każdym razie sprzeczne;

Ja dawno temu napisałem prosty programik do porównywania wersji (ale w delphi...) i działa, tyle że format identyfikatora jest inny (taki jak w kompilatorze - Major, Minor, Release i Build); Działa zawsze tak, jak powinna, poniżej kod w delphi:

program CanUpdateApp;

{$APPTYPE CONSOLE}

const
  AV_MAJOR   = 0;
  AV_MINOR   = 1;
  AV_RELEASE = 2;
  AV_BUILD   = 3;

type
  TAppVersionInfo = array [AV_MAJOR .. AV_BUILD] of Word;

  procedure CompleteVersionInfo(var Ver: TAppVersionInfo;
                                const Major, Minor, Release, Build: Word);
  begin
    Ver[AV_MAJOR]   := Major;
    Ver[AV_MINOR]   := Minor;
    Ver[AV_RELEASE] := Release;
    Ver[AV_BUILD]   := Build;
  end;

  function CanUpdate(AppVer, UpdVer: TAppVersionInfo): Boolean;
  begin
    Result := (AppVer[AV_MAJOR]   < UpdVer[AV_MAJOR])   or
              (AppVer[AV_MINOR]   < UpdVer[AV_MINOR])   or
              (AppVer[AV_RELEASE] < UpdVer[AV_RELEASE]) or
              (AppVer[AV_BUILD]   < UpdVer[AV_BUILD]);
  end;

var
  AppVer,
  UpdVer: TAppVersionInfo;
begin
  CompleteVersionInfo(AppVer, 1, 0, 0, 0);
  CompleteVersionInfo(UpdVer, 1, 0, 0, 0);

  WriteLn('Application Version: ', AppVer[AV_MAJOR], '.', AppVer[AV_MINOR], '.',
           AppVer[AV_RELEASE], '.', AppVer[AV_BUILD]);

  WriteLn('Update Version:      ', UpdVer[AV_MAJOR], '.', UpdVer[AV_MINOR], '.',
           UpdVer[AV_RELEASE], '.', UpdVer[AV_BUILD]);

  WriteLn;

  case CanUpdate(AppVer, UpdVer) of
    True:  Write('New version available!');
    False: Write('You have the lastest version.');
  end;

  ReadLn;
end.

Jak chcesz przetestować to przetłumacz na C++ (funkcja CanUpdate);

1 użytkowników online, w tym zalogowanych: 0, gości: 1