2016-02-02 12 views
7

Utilizzando DWScript, non vedo un modo ovvio per controllare il valore restituito della funzione FileCreate.Come verificare il valore di ritorno della funzione FileCreate di DWScript?

Esempio (non funzionante) script:

function TestFileCreate : Boolean; 
var 
    F : File; 
begin 
    F := FileCreate('MyTestFile.txt'); 
    Result := (F = -1);  // Not working! 
    Result := (F.Handle = -1); // Not working! 
end; 

Estratto dal DWScript codice sorgente:

procedure TFileCreateFunc.DoEvalAsVariant(const args : TExprBaseListExec; var result : Variant); 
var 
    h : THandle; 
    i : IdwsFileHandle; 
begin 
    h:=FileCreate(args.AsFileName[0]); 
    i:=TdwsFileHandle.Create(h); 
    Result:=IUnknown(i); 
end; 

Come si può vedere, internamente, Delphi CreateFile viene chiamato e il valore del risultato -1 quando fallisce. Questo valore numerico viene convertito in IdwsFileHandle.

risposta

2

Esse erano destinate a sollevare un'eccezione in caso di errore. Ora è stato risolto!

Esteso in modo che ora l'eccezione venga attivata solo in caso di utilizzo di un file non valido, ad eccezione di due funzioni: FileIsValid e FileClose. Aggiunti anche helper in modo che le funzioni dei file possano essere utilizzate come metodi (ad esempio "FileIsValid (f)" può anche essere scritto come "f.IsValid")

+1

Accetto la soluzione "così com'è" ma ho preferito avere un valore restituibile testabile proprio come la funzione FileCreate originale. – fpiette

+0

Hmmm, probabilmente lo cambierò e aggiungerò le cose mancanti, l'aumento dell'eccezione potrebbe causare regressioni nel codice corrente (in precedenza l'eccezione veniva sollevata quando provavo ad usare il file, e le persone potrebbero aver provato try..except in giro piuttosto che l'apertura/creazione) –