Народ чем можно работать с такими файлами
System.FileSize(F) вместо 5, 1 гига показывает 1.2 Гига
Модератор: Модераторы
stikriz писал(а):TFileStream
var f:file of byte;
begin
AssignFile(f, 'bigfile.dat');
reset(f);
writeln( FileSize(f) );
CloseFile(f);
var FF : file of byte;
S : longint;
begin
AssignFile(FF,Edit1.Text);
Reset(FF);
S := System.FileSize(FF);
procedure TForm1.Button1Click(Sender: TObject);
var
FF : file of byte;
S : int64;
begin
if OpenDialog1.Execute then
begin
AssignFile(FF,OpenDialog1.FileName);
Reset(FF);
S := System.FileSize(FF);
Caption:=IntToStr(S)+ ' Байт';
Label1.Caption:='Имя Файла: '+ OpenDialog1.FileName;
end;
end;
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
FF : file of byte;
S : int64;
begin
if OpenDialog1.Execute then
begin
AssignFile(FF,OpenDialog1.FileName);
Reset(FF);
S := System.FileSize(FF);
Caption:=IntToStr(S)+ ' Байт';
Label1.Caption:='Имя Файла: '+ OpenDialog1.FileName;
end;
end;
end.
alexmai писал(а):Вот кусок кода, работающего прекрасно на размерах до 4 гиг
(freepascal 2.4.0, даже функцию FileSize(FF) вызываю через System, но
размер показывает не правильно )
MageSlayer писал(а):alexmai писал(а):Вот кусок кода, работающего прекрасно на размерах до 4 гиг
Тип longint размером 32 бит, а FileSize для больших файлов возвращает число, не влезающее в размер 32 бит. Я же не просто так предложил использовать тип int64.
Такие баги элементарно отслеживаются компилятором. Так что обращайте внимание на предупреждения и _не_ отключайте range/overflow checks.
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1