Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2010, 13:12   #1
x852x
 
Регистрация: 03.01.2010
Сообщений: 3
По умолчанию Убрать ini

Помогите убрать чтение из ini и сделать чтение из самого файла.
Сам пробовал но не чего не получилась так как я новичок в этом.

Код:
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Gauges, Buttons, IniFiles, StdCtrls, OleCtrls, SHDocVw, ExtCtrls,
  Wininet, ImgBtn, ComCtrls, ShlObj, ComObj, ActiveX, jpeg;

type
  TFMain = class(TForm)
    Gauge1: TGauge;
    Gauge2: TGauge;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ImgBtn1: TImgBtn;
    ImgBtn2: TImgBtn;
    ImgBtn3: TImgBtn;
    ImgBtn4: TImgBtn;
    Panel1: TPanel;
    WebBrowser1: TWebBrowser;

    Image3: TImage;
    Image4: TImage;
    Label4: TLabel;
    ImgBtn5: TImgBtn;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ImgBtn4Click(Sender: TObject);
    procedure ImgBtn3Click(Sender: TObject);
    procedure ImgBtn2Click(Sender: TObject);
    procedure ImgBtn1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ImgBtn5Click(Sender: TObject);
    procedure WebBrowser1NavigateComplete2(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure Timer1Timer(Sender: TObject);
    procedure UpdateRevision(Rev: string);
  private
    { Private declarations }
  public
  Draging: Boolean;
  X0, Y0: integer;
  end;

var
  FMain: TFMain;
  USettings : TStrings;
  
implementation

uses Frm2, GetFilesThr, Misc;

{$R *.dfm}

procedure TFmain.UpdateRevision(Rev: string);
var
  Settings: TInifile;
begin
  Settings := TInifile.Create(USettings[0]+'_settings.ini');
  Settings.WriteString('main','AtRevision',Rev);
  Settings.Free;
end;


function LoadSettings(): bool;
var
  Settings: TInifile;
begin
  Result:=False;
  USettings := TStringlist.Create;
  USettings.Add(GetCurrentDir+'\');
  if(FileExists(USettings[0]+'_settings.ini')) then
  begin
    Settings := TInifile.Create(USettings[0]+'_settings.ini');
    USettings.Add(Settings.ReadString('main','NewsUrl',''));
    USettings.Add(Settings.ReadString('main','UpdatesUrl',''));
    USettings.Add(Settings.ReadString('main','LinkName','Lineage II'));
    USettings.Add(Settings.ReadString('main','Installed','0'));
    USettings.Add(Settings.ReadString('main','CreateBackup','0'));
    USettings.Add(Settings.ReadString('main','AtRevision','0'));
    USettings.Add(Settings.ReadString('main','RunCustom','system\l2.exe'));
    Settings.Free;
    Result:=True;
  end
end;
x852x вне форума Ответить с цитированием
Старый 04.01.2010, 13:13   #2
x852x
 
Регистрация: 03.01.2010
Сообщений: 3
По умолчанию Продолжение

Продолжение
Код:
// создает ярлык на себя на рабочем столе
procedure CreateDesktopIcon(ilname, WorkDir, desc : string);
var
  IObj : IUnknown;
  SLink : IShellLink;
  PFile : IPersistFile;
  desk : string;
  lnkpath : WideString;
begin
  if(ilname<>'') then begin
  SetLength(desk, MAX_PATH+1);
  SHGetSpecialFolderPath(0, PAnsiChar(desk),CSIDL_DESKTOPDIRECTORY,False);
  lnkpath:= PChar(desk)+'\'+ilname+'.lnk';
  IObj := CreateComObject(CLSID_ShellLink);
  SLink := IObj as IShellLink;
  PFile := IObj as IPersistFile;
  with SLink do
  begin
    SetDescription(PChar(desc));
    SetPath(PChar(Application.ExeName));
    SetWorkingDirectory(PAnsiChar(WorkDir));
  end;
  PFile.Save(PWChar(WideString(lnkpath)), FALSE);
  end;
end;




procedure TFMain.FormCreate(Sender: TObject);
var
  regn, tmpRegn, x, y: integer;
  nullClr: TColor;
  s_load: bool;
  Settings: TInifile;
begin
  s_load:=LoadSettings();
  if (s_load) then
  begin
    if (USettings[4]='0') then
    begin
      Settings := TInifile.Create(USettings[0]+'_settings.ini');
      Settings.WriteString('main','Installed','1');
      Settings.Free;
      CreateDesktopIcon(USettings[3],USettings[0],'Play Lineage II');
    end;
  end
  else
  begin
    FMain.Timer1.Enabled:=False;
    ShowMessage('ERROR: _settings.ini Not Found !');
    Application.Terminate; // .close здесь не пройдет 
  end;

  // Наводим красивость на форму ...
  FMain.brush.bitmap:=Image1.picture.bitmap;
  nullClr := image1.picture.Bitmap.Canvas.Pixels[0, 0];
  regn := CreateRectRgn(0, 0, image1.picture.Graphic.Width,
  image1.picture.Graphic.Height);
  for x := 1 to image1.picture.Graphic.Width do
    for y := 1 to image1.picture.Graphic.Height do
      if image1.picture.Bitmap.Canvas.Pixels[x - 1, y - 1] = nullClr then
      begin
        tmpRegn := CreateRectRgn(x - 1, y - 1, x, y);
        CombineRgn(regn, regn, tmpRegn, RGN_DIFF);
        DeleteObject(tmpRegn);
      end;
  SetWindowRgn(FMain.handle, regn, true);
end;

procedure TFMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Draging := true;
  x0 := x;
  y0 := y;
end;

procedure TFMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Draging := false;
end;

procedure TFMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Draging = true then
  begin
    FMain.Left := FMain.Left + X - X0;
    FMain.top := FMain.top + Y - Y0;
  end;
end;

procedure TFMain.ImgBtn4Click(Sender: TObject);
begin
  FMain.Close;
end;

procedure TFMain.ImgBtn3Click(Sender: TObject);
begin
  FMain.Close;
end;

procedure TFMain.ImgBtn2Click(Sender: TObject);
var
  WThread : GFilesThread;
begin
  Label3.Caption:='';
  WThread:=GFilesThread.Create(True);
  WThread.FreeOnTerminate:=True;
  WThread.UpdatesUrl:=USettings[2];
  WThread.ForceCheck:=True;
  WThread.CreateBackup:=StrToInt(USettings[5]);
  WThread.LocalRevision:=StrToInt(USettings[6]);
  WThread.Resume;
end;

procedure TFMain.ImgBtn1Click(Sender: TObject);
begin
  RunApp(USettings[0]+Usettings[7]);
  FMain.Close;
end;

procedure TFMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 USettings.Free;
end;

procedure TFMain.ImgBtn5Click(Sender: TObject);
begin
 FMain.Enabled:=False;
 Form1.Show;
end;

procedure TFMain.WebBrowser1NavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin

end;

procedure TFMain.Timer1Timer(Sender: TObject);
var
  WThread : GFilesThread;
begin
  FMain.Timer1.Enabled:=False;
  WebBrowser1.Navigate(USettings[1]);
  Label3.Caption:='';
  WThread:=GFilesThread.Create(True);
  WThread.FreeOnTerminate:=True;
  WThread.UpdatesUrl:=USettings[2];
  WThread.ForceCheck:=False;
  WThread.CreateBackup:=StrToInt(USettings[5]);
  WThread.LocalRevision:=StrToInt(USettings[6]);
  WThread.Resume;
end;

end.
x852x вне форума Ответить с цитированием
Старый 04.01.2010, 17:46   #3
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Я подскажу КАК а ты уже сам всё исправишь где нужно.

Итак, каким образом считывается информация с ИНИ? Вот таким:
Цитата:
Ini.ReadString('...','...','...);
И на подобии считывание просходит и других типов.
А заменить можно через Мемо скажем, единственное, что не будет такого удобства как хотелось бы, и какое есть в ИНИ:
Цитата:
Memo1.Lines.LoadFromFile(путь к файлу);
Button1.Caption:=Copy(Memo1.lines[1],length('ButtonCaption'),length(Mem o1.Lines[1])-Length('ButtonCaption'));
А сам документ выглядит так:
Цитата:
[В отличии от ИНИ, здесь любой текст, не вляющий ни на что]
ButtonCaption=Заголовок кнопки
Разница стала только в том, что теперь нужно копировать часть строки из Мемо1 в зависимости от длинны фразы, стоящей слева от значения. Это ИНИ делало самостоятельно.

Вы это хотели реализовать?
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 10.08.2010, 23:28   #4
programmizt
Новичок
Джуниор
 
Регистрация: 18.03.2010
Сообщений: 1
По умолчанию

Я думаю, топикстартер имел ввиду "вшитие" строк из ини файла в саму программу То есть чтобы не происходило чтение с ини файла, чтобы его убрать
programmizt вне форума Ответить с цитированием
Старый 19.10.2010, 09:34   #5
hardpro
 
Регистрация: 18.11.2009
Сообщений: 6
По умолчанию Я так сделал убрав из конфига все кроме ревизии бекапа и инстала,но столкнулся с проблеммой

Код:
        procedure TFMain.Timer1Timer(Sender: TObject);
var
  WThread : GFilesThread;
begin
  FMain.Timer1.Enabled:=False;
  WebBrowser1.Navigate('http://www.link.ru/upd/news/');
  Label3.Caption:='';
  WThread:=GFilesThread.Create(True);
  WThread.FreeOnTerminate:=True;
  WThread.UpdatesUrl:= 'http://www.link.ru/upd/files/';
  WThread.ForceCheck:=False;
  WThread.CreateBackup:=StrToInt(USettings[2]);
  WThread.LocalRevision:=StrToInt(USettings[3]);
  WThread.Resume;
end;
Из-за двух выделенных right слешев,не компилируется и => не выполняется программа,а точнее не работает апдейт.
Без http ссылка не работает,с http не компилируется,если брать из конфига как бекап и реву то все норм.ну не понимаю в чем проблема...

Последний раз редактировалось hardpro; 19.10.2010 в 09:39.
hardpro вне форума Ответить с цитированием
Старый 19.10.2010, 11:22   #6
hardpro
 
Регистрация: 18.11.2009
Сообщений: 6
Сообщение GFilesTread

Код:
unit GetFilesThr;

interface

uses
  Classes, Wininet, Windows, SysUtils, Dialogs, Forms;

type
  GFilesThread = class(TThread)
  private
    LTemp : Longword;             // Âðåìåííàÿ ïåðåìåííàÿ ... òî÷íåå òàê , ïåðåìåííàÿ äëÿ âðåìåííûõ äàííûõ
    STemp : string;               // ---//--- còðîêîâàÿ
    FilesToGet : TStringList;     // Ýòî áóäåì êà÷àòü
    FilesSize : Longword;         // Îáùèé ðàçìåð çàãðóæàåìûõ ôàéëîâ
    CBackup : integer;            // Ôëàã íåîáõîäèìîñòè áýêàïà
    CRevision : integer;          // Òåêóùàÿ ðåâèçèÿ
    CForceCheck : boolean;        // Ôëàã Ïðèíóäèòåëüíîé ïðîâåðêè [ Åñëè íàæàëè íà ôóëë ÷åê èëè ïðè ðàçëè÷èè ðåâèçèé ]
    CSwitch : integer;            // Áåñòîëêîâûé ôëàã , èñïîëüçóåòñÿ â ô-èè îáíîâëåíèÿ ïðîãðåññà
    UUrl : string;                // URL êàòàëîãà ñ àïäåéòàìè
    USelfParam : string;          // Ïàðàìåòðû êëèåíòà àâòîîáíîâëåíèÿ, èñïîëüçóåòñÿ â ô-èè ñàìîîáíîâëåíèÿ
    Dir: string;                  // "Äîìàøíÿÿ" ïàïêà [ òåêóùèé ðàáî÷èé êàòàëîã êëèåíòà ]
    FSource: TStream;             // èñïîëüçóåòñÿ àðõèâàòîðîì
  protected
    procedure Execute; override;
    procedure UpdateFileProgress;
    procedure SetFileProgressMax;
    procedure UpdateStatusLabel;
    procedure UpdateFileDecompStat;
    procedure UpdateFilesProgress;
    procedure CheckFiles(FList : TStringList);
    procedure BZProgress(Sender: TObject);
    procedure LockFMain;
    procedure UNLockFMain;
    procedure GetFiles;
    procedure SelfUpdate(SelfVal : string);
    procedure UpdateRevision;
    procedure ModHosts(Lines : TStringList);
    procedure DoUncompressStream(ASource, ADest: TStream);
    procedure DoUncompress(const ASource, ADest: TFileName);
    function HTTPGetFile(const fileURL, FileName: string; sh_progress: boolean): boolean;
  public
    property CreateBackup : integer write CBackup;
    property UpdatesUrl : string write UUrl;
    property LocalRevision : integer write CRevision;
    property ForceCheck : boolean write CForceCheck;
  end;

implementation
uses UnitMain, Misc, BZip2, md5, LstFile;

// ---------------- Óæîñ [ íèæå - ô-èè äëÿ îáíîâëåíèÿ îñíîâíîé ôîðìû ]

procedure GFilesThread.UpdateStatusLabel;
begin
  FMain.Label3.Caption:=STemp;
end;

procedure GFilesThread.SetFileProgressMax;
begin
  if(CSwitch=0) then
    FMain.Gauge1.MaxValue:=LTemp;
  if(CSwitch=1) then
    FMain.Gauge2.MaxValue:=LTemp;
end;

procedure GFilesThread.UpdateFileProgress;
begin
  FMain.Gauge1.Progress:=LTemp;
end;

procedure GFilesThread.UpdateFilesProgress;
begin
  FMain.Gauge2.Progress:=LTemp;
end;

procedure GFilesThread.UpdateRevision;
begin
  FMain.UpdateRevision(IntToStr(CRevision));
end;

procedure GFilesThread.UpdateFileDecompStat;
begin
  FMain.Gauge1.Progress:=LTemp;
end;

procedure GFilesThread.BZProgress(Sender: TObject);
begin
  LTemp:=FSource.Position;
  Synchronize(UpdateFileDecompStat);
end;

procedure GFilesThread.LockFMain;
begin
  Fmain.ImgBtn1.Visible:=False;
  Fmain.ImgBtn2.Visible:=False;
end;

procedure GFilesThread.UNLockFMain;
begin
  Fmain.ImgBtn1.Visible:=True;
  Fmain.ImgBtn2.Visible:=True;
end;

// ---------------- êîíåö óæîñà

function GFilesThread.HTTPGetFile(const fileURL, FileName: string; sh_progress: boolean): boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: Longword;
  f: file;
  sAppName: string;
begin
  Result := False;
  sAppName := 'Interlude.WS Updater';
  LTemp:=0;
  hSession := InternetOpen(PChar(sAppName),
  INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    if (hURL <> nil) then  begin
    try
      DeleteUrlCacheEntry(PChar(fileURL));
      AssignFile(f, FileName);
      Rewrite(f,1);
      repeat
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen);
        if (sh_progress) then
        begin
          LTemp:=LTemp+BufferLen;
          Synchronize(UpdateFileProgress);
        end;
      until
        BufferLen = 0;
      CloseFile(f);
      Result := True;
    finally
      InternetCloseHandle(hURL);
    end;
  end;
  finally
    InternetCloseHandle(hSession);
  end;
  LTemp:=0;
  Synchronize(UpdateFileProgress);
end;
hardpro вне форума Ответить с цитированием
Старый 19.10.2010, 11:23   #7
hardpro
 
Регистрация: 18.11.2009
Сообщений: 6
Сообщение GFilesTread Часть 2

Код:
procedure GFilesThread.DoUncompress(const ASource, ADest: TFileName);
var
  Source, Dest: TStream;
begin
  Source := TFileStream.Create(ASource, fmOpenRead + fmShareDenyWrite);
  try
    Dest := TFileStream.Create(ADest, fmCreate);
    try
      DoUncompressStream(Source, Dest);
    finally
      Dest.Free;
    end;
  finally
    Source.Free;
    DeleteFile(ASource);
  end;
end;

procedure GFilesThread.DoUncompressStream(ASource, ADest: TStream);
const
  BufferSize = 65536;
var
  Count: Integer;
  Decomp: TBZDecompressionStream;
  Buffer: array[0..BufferSize - 1] of Byte;
begin
  FSource := ASource;
  LTemp:=FSource.Size;
  CSwitch:=0;
  Synchronize(SetFileProgressMax);
  Decomp := TBZDecompressionStream.Create(ASource);
  try
    Decomp.OnProgress := BZProgress;
    while True do
    begin
      Count := Decomp.Read(Buffer, BufferSize);
      if Count <> 0 then ADest.WriteBuffer(Buffer, Count) else Break;
    end;
  finally
    Decomp.Free;
    FSource := nil;
    LTemp:=0;
    Synchronize(UpdateFileDecompStat);
  end;
end;


procedure GFilesThread.CheckFiles(FList : TStringList);
var
  i: integer;
  FParam: TStringList;
  FNameLocal: string;
begin
  if(FList.Count>0) and (FList[0]<>'FAIL') and (not terminated) then
  begin
    STemp:='Ïðîâåðêà íåîáõîäèìîñòè îáíîâëåíèÿ';
    Synchronize(UpdateStatusLabel);
    CSwitch:=1;
    LTemp:=FList.Count-1;
    Synchronize(SetFileProgressMax);
    FParam:=TStringList.Create;
    for i:=0 to FList.Count-1 do
    begin
      LTemp:=i;
      Synchronize(UpdateFilesProgress);
      FParam:=Tokenize(FList[i],'|');
      FNameLocal:=Dir+FParam[2];
      STemp:='Ïðîâåðêà: '+FParam[2];
      Synchronize(UpdateStatusLabel);
      if (not FileExists(FNameLocal)) then
      begin
        FilesToGet.Add(FList[i]);
        FilesSize:=FilesSize+StrToInt(FParam[0]);
      end
      else
      begin
        if (MD5Print(MD5File(FNameLocal))<>FParam[1]) then
        begin
          FilesToGet.Add(FList[i]);
          FilesSize:=FilesSize+StrToInt(FParam[0]);
        end;
      end;
    end;
    FParam.Free;
    LTemp:=0;
    Synchronize(UpdateFilesProgress);
    STemp:='';
    Synchronize(UpdateStatusLabel);
  end;
end;

procedure GFilesThread.SelfUpdate(SelfVal : string);
var
  FParam: TStringList;
  FNameLocal: string;
  F:boolean;
begin
  if(SelfVal<>'') then
  begin
    FParam:=TStringList.Create;
    FParam:=Tokenize(SelfVal,'|');
      FNameLocal:=Dir+FParam[2];
      if (MD5Print(MD5File(FNameLocal))<>FParam[1]) then
      begin
        FilesSize:=FilesSize+StrToInt(FParam[0]);
        F:=HTTPGetFile(UUrl+FParam[2]+'.bz2',FNameLocal+'.bz2',True);
        if(F) then begin
          try
           DoUncompress(FNameLocal+'.bz2',Dir+FParam[2]+'.New');
           GenKillerBat(FParam[2]);
           RunApp(Dir+'Update.bat');
          except
            STemp:='Îøèáêà îáíîâëåíèÿ';
            DeleteFile(FNameLocal);
          end;
        end;
      end;
    FParam.Free;
  end;
end;
hardpro вне форума Ответить с цитированием
Старый 19.10.2010, 11:24   #8
hardpro
 
Регистрация: 18.11.2009
Сообщений: 6
Сообщение GFilesTread Часть 3

Код:
procedure GFilesThread.ModHosts(Lines : TStringList);
var
 Hosts : textfile;
 H, HostsStrings, HostLineParam : TStringList;
 HostsPath, temp : string;
 i, z, funnyFlag : integer;
 WindirP : PChar;
 Res : cardinal;
begin
  WinDirP := StrAlloc(MAX_PATH);
  Res := GetWindowsDirectory(WinDirP, MAX_PATH);
  if Res > 0 then
  begin
    // åñëè â ñèñòåìå óñòàíîâëåí MSN , õîñòû â hosts.msn
    if(FileExists(StrPas(WinDirP)+'\system32\drivers\etc\hosts.msn')) then
      HostsPath := StrPas(WinDirP)+'\system32\drivers\etc\hosts.msn'
    else
      HostsPath := StrPas(WinDirP)+'\system32\drivers\etc\hosts';
    AssignFile(Hosts,HostsPath);
    Reset(Hosts);
    HostsStrings:= TStringList.Create;
    H:= TStringList.Create;
    H.Add('#-------- Added by L2Updater --------');
    // ÷èòàåì õîñò â ñòðîêîâûé ìàññèâ\ñïèñîê
    while (not Eof(Hosts)) do
    begin
      ReadLn(Hosts, temp);
      HostsStrings.Add(Trim(temp));
    end ;
    Reset(Hosts);
    for i:=0 to Lines.Count-1 do
    begin
      funnyFlag:=0;
      HostLineParam:=Tokenize(Lines[i],'|');
      for z:=0 to HostsStrings.Count-1 do
      begin
       if (StrSearch(1,HostsStrings[z],HostLineParam[0])>0) and (HostsStrings[z][1]<>'#') then
       begin
          if (StrSearch(1,HostsStrings[z],HostLineParam[1]+#9)= 0) and (StrSearch(1,HostsStrings[z],HostLineParam[1]+' ')= 0 ) then
          begin
           HostsStrings[z]:= '#'+HostsStrings[z];
           funnyFlag:=1;
          end
          else funnyFlag:=2;
       end;
      end;
      if (funnyFlag=1) or (funnyFlag=0)  then
        H.Add(HostLineParam[1]+#9+HostLineParam[0]);
    end;
    H.Add('#-----------------');
    if H.Count>2 then
    begin
      Rewrite(Hosts);
      STemp:='Ïðîâåðêà ôàéëà Hosts';
      Synchronize(UpdateStatusLabel);
      for i:=0 to HostsStrings.Count-1 do
      begin
        WriteLn(Hosts,HostsStrings[i]);
      end;

      for i:=0 to H.Count-1 do
      begin
       WriteLn(Hosts,H[i]);
      end;
      STemp:='Hosts ôàéë èçìåíåí';
      Synchronize(UpdateStatusLabel);
    end;
      H.Free; HostsStrings.Free; HostLineParam.Free;
  CloseFile(Hosts);
  end;
end;

procedure GFilesThread.GetFiles;
var
  FParam : TStringList;
  i : integer;
  F,  error : boolean;
  LocalFile, BakFile: string;
begin
  error := False;
  if (FilesToGet.Count>0) then
  begin
    FParam:=TStringList.Create;
    LTemp:=FilesToGet.Count-1;
    CSwitch:=1;
    Synchronize(SetFileProgressMax);
    i:=0;
    while (i < FilesToGet.Count) and (not terminated) do
    begin
      // Îòîáðàæàåì ïðîãðåññ çàãðóçêè ôàéëîâ
      FParam:=Tokenize(FilesToGet[i],'|');
      LocalFile:= Dir+FParam[2];
      STemp:='Çàãðóçêà: '+ FParam[2];
      Synchronize(UpdateStatusLabel);

      // Óñòàíàâëèâàåì Ìàêñ. Çíà÷åíèÿ äëÿ ïðîãðåññà çàãðóçêè ôàéëà
      CSwitch:=0;
      LTemp:= StrToInt(FParam[0]);
      Synchronize(SetFileProgressMax);

      if (not DirectoryExists(ExtractFilePath(LocalFile))) then
        ForceDirectories(ExtractFilePath(LocalFile));
      F:=HTTPGetFile(UUrl+ReplaceStr(FParam[2],'\','/')+'.bz2',LocalFile+'.bz2',True);
      if (F) then
      begin
        try
          if (CBackup=1) then
          begin
            BakFile:=Dir+'backup\'+FParam[2];
            if (not DirectoryExists(ExtractFilePath(BakFile))) then
              ForceDirectories(ExtractFilePath(BakFile));
            CopyFile(PChar(LocalFile),PChar(BakFile),false);
          end;
          STemp:='Ðàñïàêîâêà: '+ FParam[2];
          Synchronize(UpdateStatusLabel);
          DoUncompress(LocalFile+'.bz2',Dir+FParam[2]);
        except
          STemp:='Îøèáêà îáíîâëåíèÿ';
          error := True;
        end;
      end
      else
      begin
        STemp:='Îøèáêà îáíîâëåíèÿ';
        error := True;
        Break;
      end;
    inc(i);
    LTemp:=i;
    CSwitch:=1;
    Synchronize(UpdateFilesProgress);
  end;
  LTemp:=0;
  Synchronize(UpdateFilesProgress);
  FParam.Free;
  if (not error) then
    STemp:='Îáíîâëåíèå óñïåøíî óñòàíîâëåíî';
  end
  else STemp:='';
end;
hardpro вне форума Ответить с цитированием
Старый 19.10.2010, 11:24   #9
hardpro
 
Регистрация: 18.11.2009
Сообщений: 6
Сообщение GFilesTread Часть 4

Код:
procedure GFilesThread.Execute;
var
  List: TListFile;
  CFiles, NFiles, HostsLines : TStringList;
  TRev, IsModHosts : integer;
  F : boolean;
begin
  Dir:=GetCurrentDir+'\';
  FilesSize:=0;
  Synchronize(LockFMain);
  STemp:='Çàãðóçêà ëèñòà îáíîâëåíèé';
  Synchronize(UpdateStatusLabel);
  if(UUrl[length(UUrl)]<>'/') then UUrl:=UUrl+'/';
  F:=HTTPGetFile(UUrl+'files.lst.bz2',Dir+'files.lst.bz2', True);
  if (F) then
  begin
    STemp:='';
    Synchronize(UpdateStatusLabel);
    try
      DoUncompress(Dir+'files.lst.bz2',Dir+'files.lst');
    except
      STemp:='Îøèáêà îáíîâëåíèÿ';
      Synchronize(UpdateStatusLabel);
      DeleteFile(Dir+'files.lst');
    end;
    if(FileExists(Dir+'files.lst')) then
    begin
      FilesToGet := TStringList.Create;
      List := TListFile.Create(Dir+'files.lst');
      CFiles:=TStringList.Create;
      TRev:=StrToInt(List.GetKeyValue('settings','Rev'));
      IsModHosts:=StrToInt(List.GetKeyValue('settings','ModHosts'));
      if (IsModHosts = 1) then
      begin
        HostsLines:= TStringList.Create;
        HostsLines:= List.GetFSection('hosts');
        try
          ModHosts(HostsLines);
        finally
          HostsLines.Free;
        end;
      end;
      USelfParam:= List.GetFSection('self')[0];
      if(USelfParam<>'FAIL') then SelfUpdate(USelfParam); // ñíà÷àëà ïðîâåðÿåì ñåáÿ :)
      CFiles:=List.GetFSection('files_critical');
      CheckFiles(CFiles); // ïðîâåðÿåì êðèòè÷åñêèå ôàéëû
      CFiles.Free;
      if (CForceCheck) or (TRev>CRevision) then // åñëè ïîëíàÿ ïðîâåðêà èëè íåñîîòâåòñòâèå ðåâèçèé, ïðîâåðÿåì âñå ôàéëû
      begin
        if (CBackup=1) then
        begin
          DelDir(Dir+'backup');
          MkDir(Dir+'backup');
        end;
        NFiles:=TStringList.Create;
        NFiles:=List.GetFSection('files_normal');
        CheckFiles(NFiles);
        NFiles.Free;
      end;
      GetFiles;
      List.Destroy;
      FilesToGet.Free;
      DeleteFile(Dir+'files.lst');
      if TRev>CRevision then
      begin
        CRevision:=TRev;
        Synchronize(UpdateRevision);
      end;
    end;
  end
  else
  begin
    STemp:='Îøèáêà îáíîâëåíèÿ';
    DeleteFile(Dir+'files.lst');
  end;
  Synchronize(UpdateStatusLabel);
  Synchronize(UNLockFMain);
end;

end.
hardpro вне форума Ответить с цитированием
Старый 19.10.2010, 11:29   #10
hardpro
 
Регистрация: 18.11.2009
Сообщений: 6
По умолчанию

Все пытаюсь избавиться от ошибки из поста №5

Наводит на подозрения строчка:
Код:
  F:=HTTPGetFile(UUrl+ReplaceStr(FParam[2],'\','/')+'.bz2',LocalFile+'.bz2',True);
А точнее что за FParam[2].

Если с конфига он нормально читает,а в прямом виде нет,есть идеи ввести временно создаваемый файл при запуске(и при нажатии проверить обновление),
в котором будет прописываться ссылка. И после выполнения удалять этот файл.
hardpro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ini файл Baaandit Общие вопросы Delphi 8 23.11.2009 14:30
BOOT.ini Syltan Windows 13 25.10.2009 02:11
INI Яр|/||< (^_^) Общие вопросы Delphi 2 13.10.2009 16:53
*.INI Mustang Общие вопросы Delphi 16 09.10.2007 02:33