delphidwscript

How to check return value of DWScript FileCreate function?


Using DWScript, I don't see obvious way of checking the return value of the FileCreate function.

Example (not working) script:

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

Extract from DWScript source code:

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;

As you can see, internally, Delphi CreateFile is called and the result value is -1 when it fails. This numeric value is converted to a IdwsFileHandle.


Solution

  • They were intended to raise an exception in case of failure. This has now beed fixed!

    Extended so that now exception is triggered only in case of use of an invalid file, except for two functions: FileIsValid and FileClose. Also added helpers so that file functions can be used like methods (ie. "FileIsValid(f)" can also be written as "f.IsValid")