Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Вот мой код, которым я пользуюсь для определения информации о группе файлов:
varFhnd2: 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); whileec = 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, которая содержит размер файла в байтах. Это может быть не так красиво, но это работает:
functionGetFileSize(FileName: string
): Longint; var
SearchRec: TSearchRec; begin
if
FindFirst(FileName, faAnyFile, SearchRec) = 0 then
Result:=SearchRec.Size else
Result:=-1; {возвращаем ошибку, это может быть число меньше нуля} end
;
В зависимости от предпочтений, можно выбрать одну из двух приведенных ниже функций. В первой реализуется идея временного изменения атрибутов файла, необходимого для его чтения. Вторая использует Windows API, но не содержит средств проверки наличия ошибок.
functionFileGetSize1(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.
FunctionFileSizeInBytes(YourFile : String
) : LongInt; Var
F: Integer; Begin
F:=FileOpen(YourFile,0); { режим ReadOnly } FilesizeInBytes := FileSeek(F,0,2); FileClose(F) End
;
Примечание: Проверка ошибок отсутствует !!!