Einzelnen Beitrag anzeigen

Jasmine

Registriert seit: 30. Jun 2005
Ort: Rom / Italien
24 Beiträge
 
Delphi 7 Personal
 
#7

Re: Datei kürzen (truncate) für files > 4.294 GB

  Alt 17. Nov 2005, 17:39
Hallo himitsu,

also im Prinzip habe mir Dein Beispiel angeschaut (64bit für ..),
und mir aus File64.pas nur die Seek64 Funktion geholt.

Unter Interfaces habe ich :

Procedure Seek64 (Var F{: File of xxx}; recNum: Int64);

Unter Implementation habe ich :

Type TLargeIntRec = packed Record Case Byte of
0: (Org: Int64);
5: (Lo: LongWord; Hi: LongInt);
End;
TFlushFunc = Function(Var F): Integer;

und Deine Prozedur :

Procedure Seek64(Var F; recNum: Int64);
Begin
If (TFileRec(F).Mode >= fmInput) and (TFileRec(F).Mode <= fmInOut) Then Begin
TFlushFunc(TFileRec(F).FlushFunc)(F);
TTextRec(F).BufEnd := 0;
TTextRec(F).BufPos := 0;
recNum := recNum * TFileRec(F).RecSize;
If (SetFilePointer(TFileRec(F).Handle, TLargeIntRec(recNum).Lo, @TLargeIntRec(recNum).Hi, FILE_BEGIN)
= Cardinal(-1)) and (TLargeIntRec(recNum).Hi = 0) Then SetInOutRes(GetLastError);
End Else SetInOutRes(103);
End;

in meinen Code integriert.
Das wars eigendlich.

Der Aufrug erfolgt :

AssignFile(f,DNAFilenameLoad);
//FileMode:=2;
//Reset(f,1);
Reset(f);
Seek64(f,NewEndPosition); // int64
truncate(f);
CloseFile(f);

Jedoch so klappte es nicht un es ergab die Exception, also habe ich
in Deiner Prozedur, wie gesagt, einiges ausgeklammert.
Erkläre mir doch mal bitte den Sinn von:

recNum := recNum * TFileRec(F).RecSize;

Danke.



Viele Grüße,
Jasmine
Jasmine
  Mit Zitat antworten Zitat