Kezdőoldal » Számítástechnika » Programozás » Free Pascal esetén van valamil...

Free Pascal esetén van valamilyen limit amíg a fájlkezelési parancsok működnek? Fura probléma (bővebben lent)

Figyelt kérdés

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?



2015. máj. 16. 14:50
1 2
 11/15 ejbenjaro ***** válasza:

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.

2015. máj. 16. 18:54
Hasznos számodra ez a válasz?
 12/15 SimkoL ***** válasza:

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.

2015. máj. 16. 19:02
Hasznos számodra ez a válasz?
 13/15 A kérdező kommentje:
A FileTruncate is a TFilestream segítségével dolgozik? A "THandle" paraméter nem tudom mit jelenthet neki, de ha csak simán alkalmazom a kódban, hogy : filetruncate(f,meret) az nem igazán tetszik neki, bár ez egy függvény úgyhogy biztos logikailag kellene alkalmazni, mert igaz vagy hamis értéket ad vissza.
2015. máj. 16. 19:33
 14/15 ejbenjaro ***** válasza:

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.

2015. máj. 16. 20:09
Hasznos számodra ez a válasz?
 15/15 anonim ***** válasza:

Szerintem a unitokkal és a klasszikus pascal fájlkezeléssel lesz gond.

Ezeket használd:

[link]


Pl:

"AssignFile (prevent the use of the older Assign procedure)"

2015. máj. 17. 10:49
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!