В коде могут присутствовать синтаксические ошибки, т.к. я просто вырезал этот
код из своей программы, чтобы показать как работает функция FindFirst. Она
должна возвращать информацию о файле в SearchRec, который будет содержать любую
необходимую вам информацию о файле. Я думаю это то, что вам нужно, при этом нет
необходимости даже открывать файл.
Я все это делал с использованием FindFirst. Функция возвращает
запись, имеющую тип TSearchRec. Данная запись содержит переменную Size, которая
содержит размер файла в байтах. Это может быть не так красиво, но это
работает:
function GetFileSize(FileName: string): Longint;
var
SearchRec: TSearchRec;
beginif FindFirst(FileName, faAnyFile, SearchRec) = 0 then
Result:=SearchRec.Size
else
Result:=-1; {возвращаем ошибку, это может быть число меньше нуля}end;
В зависимости от предпочтений, можно выбрать одну из двух
приведенных ниже функций. В первой реализуется идея временного изменения
атрибутов файла, необходимого для его чтения. Вторая использует Windows API, но
не содержит средств проверки наличия ошибок.
function FileGetSize1(Filename: string): LongInt;
var
F: file;
OldFileAttr: Integer;
beginif FileExists(Filename) thenbegin
OldFileAttr := FileGetAttr(Filename);
FileSetAttr(Filename, OldFileAttr and (faReadOnly xor $FFFF));
try
AssignFile(F, Filename);
Reset(F, 1);
Result := FileSize(F);
CloseFile(F);
finally
FileSetAttr(Filename, OldFileAttr);
end;
endelse
Result := 0;
end;
function FileGetSize2(Filename: string): LongInt;
var
FileHandle: Integer;
beginif FileExists(Filename) thenbegin
FileName := FileName + chr(0);
FileHandle := _lopen(@FileName[1], 0);
Result := _llseek(FileHandle, 0, 2);
_lclose(FileHandle);
endelse
Result := 0;
end;
Я не стал возиться с AssignFile.
Function FileSizeInBytes(YourFile : String) : LongInt;
Var
F: Integer;
Begin
F:=FileOpen(YourFile,0); { режим ReadOnly }
FilesizeInBytes := FileSeek(F,0,2);
FileClose(F)
End;
Примечание: Проверка ошибок отсутствует !!!
Получение размера файла: в статье описываются различные методы определения размера файла в Delphi, включая использование функции FindFirst и Windows API.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.