当我使用Windows API从我的Delphi 6应用程序上的只读文件调用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;
- roschler
答案 0 :(得分:6)
您是否检查了打开文件以获取文件句柄的结果?显然,如果文件无法打开,则使用无效句柄调用GetFileSizeEx
。您需要以只读模式打开文件。
答案 1 :(得分:0)
也许是这样的?
function GetFileSize_(CONST sFilename: string): Int64; { NOT TESTED }
VAR aHandle: THandle;
begin
aHandle:= CreateFile(PChar(sFilename), GENERIC_READ, FILE_SHARE_READ, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if aHandle = INVALID_HANDLE_VALUE
then Result:= -1
else
begin
GetFileSizeEx(aHandle, Result);
FileClose(aHandle);
end;
end;