2013-10-08 2 views
0

Так что я привязываюсь к использованию компонента idFTP перед созданием любой формы. Я вызываю функцию, которая должна проверять файл на ftp-сервере, поэтому мне нужно его создать.Использование idFTP перед созданием формы

Вот функция:

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. 

Когда функция вызывается, я получаю нарушение прав доступа. Я уверен, что не создаю его правильно, но я не знаю, как заставить его работать.

+1

строка 'FTP: = FTP.Create();' 'должно быть FTP: = TidFTP.Create (ноль);'. Также помните, чтобы защитить ресурсы, используя блок «try finally». – RRUZ

+0

Хорошо, спасибо! Вы можете опубликовать это как ответ, и я соглашусь с ним. – Gab

ответ

3

Линия FTP:=FTP.Create(); должна быть FTP:=TidFTP.Create(nil);. Также помните, чтобы защитить ресурсы, используя блок finally try.

Как этот

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; 
Смежные вопросы