为什么使用标记为只读的文件的GetFileSizeEx()会出现"无效句柄"错误?

Rob*_*ler 2 windows delphi winapi file handle

当我在一个只读文件上使用我的Delphi 6应用程序中的Windows API调用GetFileSizeEx()时,我得到一个O/S错误代码6("无效的文件句柄").如果从文件中删除只读属性,则错误消失.为什么我会收到该错误,是否有办法使用该调用或类似的只读文件?

这是相关的代码:

function GetFileSizeEx(hFile: THandle; var FileSize: Int64): BOOL; stdcall; external 'kernel32.dll' name 'GetFileSizeEx';

function easyGetFileSize(theFileHandle: THandle): Int64;
begin
    if not GetFileSizeEx(theFileHandle, Result) then
        RaiseLastOSError;
end;
Run Code Online (Sandbox Code Playgroud)

- roschler

Mar*_*som 6

您是否检查了打开文件以获取文件句柄的结果?显然,如果文件无法打开,则GetFileSizeEx使用无效句柄进行调用.您需要以只读模式打开文件.