少し前に「64bit整数演算DLL」というものを見つけましたが、
それを使えば、GetFileAttributesExを使って取得した「64bit符号なし整数」を
実数に変換できるようです。
(つまり、2GBを超えるファイルサイズであっても実数の形で取得できるということ)
以下のソースコードを実行する前に、このサイト↓からi64v0b1.lzhを
ダウンロードして、中に入っているI64.dllをソースコードと同じフォルダに
入れてください。
https://www.vector.co.jp/soft/dl/win95/prog/se240689.html
ただし、申し訳ありませんが当方には2GBを超えるサイズのファイルはないので、
そういったファイルでの実験は当方ではできませんでした。
また、ファイルサイズが大きくなると実数変換にあたって若干の誤差が発生しますが、
そこはご了承ください。
#include "kernel32.as"
#module
#uselib "I64.dll"
#func U2F64 "U2F64" var,var
#deffunc exist_ex str fname,var d,local fad,local s,local buf
exist fname : if strsize=-1 : return -1
s=fname
dim fad,9 //WIN32_FILE_ATTRIBUTE_DATA構造体
GetFileAttributesEx varptr(s),0,varptr(fad)
d=0.0 : buf=0.0
lpoke buf,0,fad(8) : lpoke buf,4,fad(7)
U2F64 buf,d
if fad(7) : return -2
if fad(8)&0x80000000 : return -2
return fad(8)
#global
//使い方:
//exist_ex p1,p2
//p1に指定したファイルの大きさを、p2に指定した変数に実数の形で代入する。
//ファイルが無い場合はstatに-1が返る。
//ファイルサイズがHSPの整数で表現できる範囲を超えている場合は、statに-2が入る。
//それ以外の場合はファイルサイズがstatに入る。
//(つまり、statが0以上の場合はstatをそのままファイルサイズとして扱えばよいし、
// statが-2の場合はp2に入った実数値をファイルサイズとして扱えばよい)