0

そのため、フォームが作成される前に idFTP コンポーネントを使用するようにしています。ftp サーバー上のファイルをチェックする必要がある関数を呼び出しているので、それを作成する必要があります。

関数は次のとおりです。

function restoreBackup(online: Boolean = TRUE): Boolean;  //restores backup from server              if possible, if not from disk
var
FTP: TidFTP;
begin
if online then
begin
FTP:=FTP.Create();
FTP.Host:=getConfig('ftphost');
FTP.Username:=getConfig('ftpuser');
FTP.Port:=StrToInt(getConfig('ftpport'));
FTP.Password:=getConfig('ftppass');
try
FTP.Connect;
FTP.ChangeDir(getConfig('ftpbkpdir'));
if FTP.Size('masterlist.dat')<>-1 then
    begin
    FTP.Get('masterlist.dat', getConfig('masterlistpath'));
    end;
        except
        MessageDlg('Impossible de se connecter au serveur, la sauvegarde sera restaurée à partir du disque.', mtError, [mbOK], 0);
        end;
end;

//restore from disk

FTP.Free;
end;

プロジェクトのソースから呼び出されます。

var
Sel: Integer;
begin
Application.Initialize;
global.initGlobal;
if not global.verifyPaths then   //verify if all paths are good
begin
Sel:=MessageDlg('Un des chemins d''accès est erroné. L''application peut restaurer la     dernière sauvegarde mais il se peut que certaines informations soient perdues. Voulez-vous continuer?',
mtError, [mbYes,mbNo], 0);
if Sel=6 then  //6 is mrYes
begin
io.restoreBackup(); //// It gets called here.
end else
  begin
  Application.Terminate;
  end;
end else
begin
//Create Forms
Application.Run;
end;
end.

関数が呼び出されると、アクセス違反が発生します。私はそれを適切に作成していないと確信していますが、それを機能させる方法がわかりません。

4

1 に答える 1

3

FTP:=FTP.Create();は である必要がありますFTP:=TidFTP.Create(nil);。また、try finally ブロックを使用してリソースを保護することも忘れないでください。

このような

var
  FTP: TidFTP;
begin
if online then
begin
  FTP:=TidFTP.Create(nil);
  try
  FTP.Host:=getConfig('ftphost');
  FTP.Username:=getConfig('ftpuser');
  FTP.Port:=StrToInt(getConfig('ftpport'));
  FTP.Password:=getConfig('ftppass');
   try
    FTP.Connect;
    FTP.ChangeDir(getConfig('ftpbkpdir'));
    if FTP.Size('masterlist.dat')<>-1 then
      FTP.Get('masterlist.dat', getConfig('masterlistpath'));
   except
    MessageDlg('Impossible de se connecter au serveur, la sauvegarde sera restaurée à partir du disque.', mtError, [mbOK], 0);
   end;

  finally
    FTP.Free;
   end;
end;
于 2013-10-08T04:16:27.793 に答える