Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#1

64-Bit für TextFile / File of xxx

  Alt 21. Okt 2005, 15:40
An alle Wagemutigen.

Mir ist gestern abend was nettes beim Überarbeiten meiner Dateifunktionen aufgefallen und da hab ich gleich mal Delphi's Standardfunktionen zur Datei-Ein-/Ausgabe 64-Bit-tauglich gemacht.


Es ist bestimmt schon aufgefallen, daß die netten Dateifunktionen eigentlich nur auf 32-Bit basieren, allerdings kann man unter bestimmten Voraussetzungen dennoch mit Dateien über 2GB arbeiten.

Dieses trift vorallem zu, wenn man nicht mit dem Dateizeiger rumspielt,
demnach kein Seek, FilePos und FileSize aufruft.
Ebenso darf man die Datei nicht zum Datenanhängen öffnen, also nicht per Append öffen, da dort ja ebenfalls der Dateizeiger verändert wird.

Wenn man aber dennoch nicht auf die oben erwähnten Funktionen verzichten will, so kann man einfach auf meine Versionen ausweichen.
Diese sollten zu 100% zu Delphi's Dateifunktionen/Dateitypen kompatibel sein.

Seek64, FilePos64 und FileSize64 können dabei ohne irgendeine Änderung verwendet werden.

Nur vor der Verwendung von Append (zum öffnen einer Datei) muß statt mit AssignFile mit AssingnFile64 initialisiert werden, da AssingnFile64 die für Append nötigen Funktionen einrichtet.

Delphi-Quellcode:
Unit File64;

// © 1997-2005 by FNS Enterprize's™
// © 2003-2005 by himitsu @ Delphi-PRAXiS

// Removement for default file funktions:
// **************************************
//
// Use this funktions to enable the 64 bit support.
//
// AssignFile64 Implants the 64 bit version of TextOpen (it's an internal function).
// Seek64 The 64 bit version of Seek.
// FilePos64 The 64 bit version of FilePos.
// FileSize64 The 64 bit version of FileSize.

Interface
  Uses Windows;

  Function AssignFile64(Var F{: TextFile/File of xxx}; Const S: String): Integer;
  Procedure Seek64 (Var F{: File of xxx}; recNum: Int64);
  Function FilePos64 (Var F{: TextFile/File of xxx}): Int64;
  Function FileSize64 (Var F{: TextFile/File of xxx}): Int64;
Das ganze hat bisher aber noch einen kleinen Haken, denn ich habe diese Funktionen noch nicht getestet, als wenn sich jemand öpfern möchte ...

Rein theoretisch sollte aber alles funktionieren, nur in AssignFile64 kann es vorkommen, das sich da ein Fehler versteckt, da ich mir an einer Stelle nicht ganz sicher war ... werd mir das aber in den nächten Tagen auch selber nochmal genauer ansehen.

Außerdem "mußte" ich einige Funktionen aus der System.pas rauskopieren, da ich bisher noch keinen Weg gefunden hatte an deren Pointer ranzukommen, ohne vorher mal eine Datei mit den Standardfunktionen (mindestens 2-mal) zu öffen.
Ich meine damit die Funktionen, welche mit einem Unterstrich beginnen. > _Funktionsname


So, wenn sich jetzt dennoch mal jemand an die kleinen Funktiönchen wagen will, so würde ich mich über viel Feedback freuen.


Ach ja, nur um es nochmals erwähnt zu haben, alle anderen unktionen, zum Öffnen/Lesen/Schreiben/Schließen werden weiterhin wie gehabt verwendet. die Änderung betrifft nur die oben aufgeführent Funktionen.

Das ganze hab ich jetzt auch noch in 'ner netten Unit untergebracht und wenn die Portierung aus'm UCC perfekt war, dann sollte das ganze ut funktionieren.

Also wie gesagt, das ganze ist nur so aus'm Gedächtnich erstellt und getestet wurde auch noch nichts, aber ich weiß zumindestens, daß die Unit sich unter D7Pro kompilieren läßt

[edit=Sharky]Auf bitte von himitsu habe ich den Anhang aus diesem Posting entfernt. Mfg, Sharky[/edit]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat