2016-02-02 64 views
7

使用DWScript,我沒有看到明顯的方式來檢查FileCreate函數的返回值。如何檢查DWScript FileCreate函數的返回值?

實施例(不工作)腳本:從DWScript源代碼

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

提取物:

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; 

正如可以看到,在內部,德爾福的CreateFile被調用,結果值是-1​​時它失敗。該數值被轉換爲IdwsFileHandle。

回答

2

他們打算在失敗的情況下引發異常。現在已經修復了!

擴展使得現在異常僅在使用無效文件的情況下被觸發,除了兩個函數:FileIsValid和FileClose。還添加了幫助程序,以便可以像使用方法一樣使用文件函數(即「FileIsValid(f)」也可以寫爲「f.IsValid」)

+1

我接受「按原樣」的解決方案,但我更喜歡有可測試的返回值就像原始的FileCreate函數一樣。 – fpiette

+0

嗯,我可能會改變,並添加缺少的東西,引發異常可能會導致當前代碼退化(以前在嘗試使用該文件時引發異常,並且人們可能已經放置try..except而不是開放/創建) –