Почему я получаю ошибку «Неверный дескриптор», используя GetFileSizeEx () с файлами, помеченными только для чтения? - PullRequest
2 голосов
/ 20 мая 2011

Когда я использую вызов Windows API GetFileSizeEx () из моего приложения Delphi 6 для файла, доступного только для чтения, я получаю код ошибки 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

Ответы [ 2 ]

6 голосов
/ 20 мая 2011

Вы проверили результат открытия файла, чтобы получить дескриптор файла? Очевидно, что если файл не удалось открыть, вы звоните GetFileSizeEx с неправильным дескриптором. Вам нужно будет открыть файл в режиме только для чтения.

0 голосов
/ 08 сентября 2014

Может как то так?

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;
...