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?
Mondjuk azért egy méret ellenőrzés sem lenne megvetendő gondolat.
Off: Géza te bűvészkedel már megint ?
Először nem írtam be hogy uses dos; Linux alatt igen picit fura. :-)
A meret által lekért fájlméret mindig tökéletes volt.
Aki azt írta, hogy mi a fene az a meret - ... az ne írjon, mert nem tudja értelmezni a kódot, valószínűleg az a 63%-os, aki örökösen értelmetlenségeket írkál a kérdésekhez.
SimkoL: nahát, már megismersz? :D
Fordít és futtat gomb gondolom. Akkor nincs mivel az FP futtat egy programot és nem biztos, hogy örökölt jogot az új program. Próbáld csak külön a lefordítottad futtatni, ne FP alól.
Off: Neked vannak ilyen 'érdekes' kérdéseid :)
Fájlméret probléma lesz a hibaüzenet oka. Ha a méret negatív szám, akkor kapod a fenti hibaüzenetet. Tehát a #2 válaszadó jóra gyanakodott. Ellenőrizni kell, hogy a méret, ahova seek-elsz, nem negatív szám-e.
Próbáld így a kódot:
program fajlvag;
{$mode objfpc} {$H+}
uses SysUtils;
var
f:file of byte;
meret:int64;
begin
assign(f,paramstr(1));
reset(f);
meret:=filesize(f);
meret:=meret-3456789;
if meret>0 then
begin
seek(f,meret);
truncate(f);
writeln('A fajl, ',paramstr(1),' vagasa sikerult!')
end else writeln('A fajl, ',paramstr(1),' vagasa NEM sikerult!');
close(f);
end.
A programot a következőképp fordítottam:
fpc fajlvag.pas
A kódon csak annyit változtattam, hogy írja ki a fájlméreteket, két writeln berakása, semmi más.
Az eredmény:
A lekért fájl mérete: 3447754987
Az új fájlméret a csökkentés után: 3444298198
An unhandled exception occurred at $0000000000400375 :
EPrivilege : Privileged instruction
$0000000000400375
Egyéb tipp?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!