Как сделать калькулятор в Delphi?

Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.

Как Delphi реализует многоплатформенную разработку?

Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...

Получение размера файла

Советы » Файлы » Получение размера файла

Вот мой код, которым я пользуюсь для определения информации о группе файлов:

var

Fhnd2: file

; sPath: string

; tpath: string

; SearchRec: TSearchRec; tempsearch: string

; tempfiles: Integer; tempbytes: LongInt; wBytes: Word; sTemp: string

; iLen: Integer; szString: array

[0..128] of

Char; ec: integer; begin

{* Выбираем системный каталог *} MailManLogS('Запуск MailMan'); sTemp := ParamStr(0); iLen := Length(sTemp); while

sTemp[iLen] <> '' do

DEC(iLen); StrPCopy(szString, sTemp); szString[iLen] := #0; SysDir := StrPas(szString); tempbytes := 0; tempfiles := 0; Files2bProc := 0; Bytes2bProc := 0; MailManLogS('Калькулируем файлы для обработки'); {* Подсчитываем, сколько файлов и байт должны быть обработаны *} tempsearch := SysDir + 'spoolwitchcrfd*.*'; ec := FindFirst(tempsearch, faSysFile, SearchRec); while

ec = 0 do

begin

if

((SearchRec.Name <> '.') and

(SearchRec.Name <> '..')) then

begin

tempfiles := tempfiles + 1; - - - - > tempbytes := tempbytes + SearchRec.Size; < - - - - - - TotalInBytes.Text := IntToStr(tempbytes); TotalInFiles.Text := IntToStr(tempfiles); MailManLogS('Файл-' + SearchRec.Name + ' Размер-' + IntToStr(SearchRec.Size)); end

; ec := FindNext(SearchRec); end

; MailManLogS('Всего файлов = ' + IntToStr(tempfiles) + ' Байт = ' + IntToStr(tempbytes)); end

;

В коде могут присутствовать синтаксические ошибки, т.к. я просто вырезал этот код из своей программы, чтобы показать как работает функция FindFirst. Она должна возвращать информацию о файле в SearchRec, который будет содержать любую необходимую вам информацию о файле. Я думаю это то, что вам нужно, при этом нет необходимости даже открывать файл.

Я все это делал с использованием FindFirst. Функция возвращает запись, имеющую тип TSearchRec. Данная запись содержит переменную Size, которая содержит размер файла в байтах. Это может быть не так красиво, но это работает:

function

GetFileSize(FileName: string

): Longint; var

SearchRec: TSearchRec; begin

if

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

if

FileExists(Filename) then

begin

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

; end

else

Result := 0; end

; function

FileGetSize2(Filename: string

): LongInt; var

FileHandle: Integer; begin

if

FileExists(Filename) then

begin

FileName := FileName + chr(0); FileHandle := _lopen(@FileName[1], 0); Result := _llseek(FileHandle, 0, 2); _lclose(FileHandle); end

else

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

;

Примечание: Проверка ошибок отсутствует !!!

Другое по теме:

Категории

Статьи

Советы

Copyright © 2024 - All Rights Reserved - www.delphirus.com