【问题标题】:How to check return value of DWScript FileCreate function?如何检查 DWScript FileCreate 函数的返回值?
【发布时间】:2026-01-23 03:30:02
【问题描述】:

使用 DWScript,我看不到检查 FileCreate 函数返回值的明显方法。

示例(不工作)脚本:

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

从 DWScript 源代码中提取:

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;

如您所见,在内部调用了 Delphi CreateFile,失败时结果值为 -1。此数值将转换为 IdwsFileHandle。

【问题讨论】:

    标签: delphi dwscript


    【解决方案1】:

    它们的目的是在失败的情况下引发异常。现已修复此问题!

    扩展,现在只有在使用无效文件的情况下才会触发异常,但两个函数除外:FileIsValid 和 FileClose。还添加了帮助器,以便文件函数可以像方法一样使用(即“FileIsValid(f)”也可以写为“f.IsValid”)

    【讨论】:

    • 我“按原样”接受解决方案,但我更喜欢有一个可测试的返回值,就像原来的 FileCreate 函数一样。
    • 嗯,我可能会改变它并添加缺少的东西,引发异常可能会导致当前代码中的回归(以前尝试使用文件时引发异常,人们可能已经放置了尝试..除了围绕那个而不是打开/创建)