Free Pascal esetén van valamilyen limit amíg a fájlkezelési parancsok működnek? Fura probléma (bővebben lent)
Debian Jessie 64 bit alatt Free Pascal 2.6.4 hibát jelez és az alábbi kód kiakad, de Windows 7 32 bit alatt ugyancsak FPC 2.6.4 esetén rendben lefut és végrehajtódik.
Linux alatt a jelenség már egy olyan fájl esetén is tapasztalható, amely nagyobb mint 3 GB.
AssignFile használata assign helyett nem segít, mert valamiért ezt a parancsot nem ismeri...
A hiba amit kiad a kód:
An unhandled exception occurred at $00000000004002CA :
EPrivilege : Privileged instruction
$00000000004002CA
{$MODE OBJFPC} {$H+}
uses dos,sysutils;
var
f:file of byte;
meret:int64;
begin
assign(f,paramstr(1));
reset(f);
meret:=filesize(f);
meret:=meret-3456789;
seek(f,meret);
truncate(f);
close(f);
end.
Mi lehet ez?
Hmm, nem értem mi a gyíkja. Kipróbáltam egy 3GB méretű fájllal és nálam is hibát dobott.
Ha FileStreammel csinálom, akkor viszont jó.
pl:
program fajlvag;
{$mode objfpc} {$H+}
uses Classes, SysUtils;
var
f: TFileStream;
begin
try
f:=TFileStream.Create(ParamSTR(1),fmOpenWrite);
writeln('Eredeti méret: ',f.Size);
f.Size:=f.Size-3456789;
writeln('Átméretezés után: ',f.Size);
finally
FreeAndNil(f);
end;
end.
Próbáld a FileTruncate() függvényt: [link]
Még annyi jutott eszembe, hogy a 2 GB-os határt emlegetik sok helyen, sok dologból kifolyólag.
A FileSeek függvény is LongInt-tel dolgozik ami 2 147 483 647 bytes.
A FileTruncate-el én is próbálkoztam, de ott is voltak gondok. A handle, ami kell neki előállítható a FileOpen függvénnyel. Lásd: [link]
Amúgy érdemes googlezni a témában pl Free Pascal Filetruncate, mert a Free Pascalnak egészen jó online dokumentációja van.
Szerintem a unitokkal és a klasszikus pascal fájlkezeléssel lesz gond.
Ezeket használd:
Pl:
"AssignFile (prevent the use of the older Assign procedure)"
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!