Hallo und willkommen zurück.
In diesem Vortrag möchte ich sprechen über die Dateipositionierung, im Grunde einige
Funktionen, die Sie ermöglichen um die Position einer Datei zu ändern.
Für viele Anwendungen geht es also los müssen in der Lage sein, auf Daten in einer
anderen Datei als der sequentiellen Reihenfolge zuzugreifen.
Die Reihenfolge beginnt am Anfang und dann
Byte für Byte gegen Ende.
Das ist nicht immer sinnvoll, weil Möglicherweise möchten Sie tatsächlich in die
Mitte einer Datei gehen und Daten abrufen oder um das Ende der Datei und Daten abrufen.
Es hängt alles von der Anwendung ab.
Du willst nicht immer gehen vom Anfang bis zum Ende.
Es gibt also verschiedene Funktionen mit denen Sie in zufälliger
Reihenfolge auf Daten zugreifen können.
Es gibt zwei Aspekte der Dateipositionierung.
Einer ist herauszufinden, wo Sie befinden sich in einer Datei und der andere bewegt sich
zu einem bestimmten Punkt in einer Datei.
Das sind wirklich die beiden Dinge, die Sie Ich möchte herausfinden,
wann Sie über Dateien und die Positionierung von a sprechen Datei, worauf es eigentlich zeigt.
Wieder, wo Sie in der Datei sind selbst und ob Sie an eine andere Stelle in
der Datei verschieben möchten oder nicht.
So können Sie unter auf die Datei zugreifen eine zufällige Position, unabhängig davon, ob
Sie die Datei öffnen, Sie können Ihren Dateipartner verschieben.
Sie müssen das nicht öffnen Datei zu ändern, wo Sie ändern
sollen sehen, wo Sie sind.
Finden Sie heraus, wo Sie sind Wir werden zuerst darüber sprechen.
Sie haben zwei Funktionen zu finden raus, wo du in einer Datei bist.
Wird ftel genannt und man ist genannt fgetpos, fget position.
Für ftell die eigentliche Funktion Die Definition ist ziemlich einfach.
Sie kehren zurück und Sie nehmen einen Dateizeiger.
Und diese Funktion wird akzeptieren Ein Dateizeiger als Argument gibt
die lange Ganzzahl zurück Wert, der die Zeichenposition in der Datei angibt, also
ist es Ich werde dir die Position sagen.
Sie können es verwenden, indem Sie eine erstellen Variable in diesem Fall fpos, die zu dem
geht, was bekommen wird zurückgegeben und dann diesen
Dateizeiger übergeben und ftel aufrufen.
Die Variable f position gilt jetzt die aktuelle Position in der Datei
und Sie können es verwenden, um zu der zurückzukehren Position zu einem späteren Zeitpunkt.
Also wird es dir die Position zurückgeben.
Dies ist der Weg, den Sie bekommen können Die Position des aktuellen
Punkts, auf den Sie zeigen.
Der Wert ist der Offset in Bytes vom Anfang der Datei.
Also sehr einfach zu Verwenden Sie pass in Ihrem Zeiger, er wird
zurückkehren und Ihnen sagen, wo Sie sind sind in Ihrer Datei grundsätzlich vom Anfang
der Datei bis wie viele Bytes von Anfang an.
In diesem Beispiel erstellen wir also Ein Dateizeiger namens fp und wir erstellen
eine Ganzzahl namens Länge.
Wir werden die Datei öffnen, und dies wäre nur zum Lesen.
Wir werden machen sicher ist es nicht null.
Wenn ja, gehen wir um einen Fehler zurückzugeben.
Und dann mach dir keine Sorgen um die Suche.
Die Suche geht eigentlich nur um zum Ende der Datei zu gelangen.
Dies ist eine weitere Funktion, die uns hilft.
Ich benutze es nur um demonstriere das ftel.
Fseek wird bis zum Ende gehen von der Datei, und dann
werden Sie ftell fp sagen, und das geht um Ihnen zu sagen, dass Sie im Grunde am Ende
der Datei sein werden.
Also der Link, der zurückgegeben wird ist am Ende der Datei.
Und so wird es passieren Es wird die Gesamtgröße der
Datei basierend auf der Länge zurückgegeben weil du deinen Zeiger tatsächlich bis zum Ende bewegt hast und
dann du sagte, wo bin ich und es sagte, du bist am Ende,
also gib das Ende zurück.
Und das Ende ist die Anzahl von Bytes ab dem Zeitpunkt des letzten Lesens.
Schauen wir uns das also innen an unserer netten IDE unsere Codeblöcke.
Hier ist unser Codierungsbeispiel wo wir unseren Dateizeiger erstellen.
Wir setzen es auf null, machen sicher ist es nicht null.
Wir versuchen es zu öffnen.
Und dann machen wir eine Suche, die gerecht ist Ich werde unseren Dateizeiger ändern.
Ftel wird es uns sagen wohin wir zeigen.
Also wird es auf das zeigen Ende und es wird eine beliebige Anzahl
von Bytes bis zum Ende sein.
Wenn wir das laufen lassen, was du machst zu bemerken ist, dass es 24 Bytes anzeigt.
Das heißt, Sie sind am Ende der Datei, da die Datei eine kleine Datei ist und
die Datei nur 24 Bytes enthält.
Normalerweise verwenden Sie ftel nach Sie haben etwas geschrieben oder gelesen oder nachdem
Sie es getan haben Suchen Sie, wo Sie irgendwohin gezogen sind.
Aber es ist sehr einfach, ftel anzurufen mit dem dateizeiger und dann
sagt len dir nur wo du bist.
Sie können auch das fget verwenden Positions- oder Fgetpos-Funktion.
Und das ist eine zweite Funktion Bereitstellung von Informationen zur
aktuellen Dateiposition.
Es ist ein bisschen mehr kompliziert als ftel.
Dies gibt eine Ganzzahl zurück.
Es braucht einen Dateizeiger und es nimmt auch den Typ f Position t ein.
Der erste Parameter ist also diesen Dateizeiger, damit Sie wissen, in
welche Datei Sie lesen müssen.
Der zweite Parameter ist ein Zeiger auf a Typ, der in standardio definiert ist. h.
Der Typ f Position t kann Zeichnen Sie jede Position in einer Datei auf.
Fget Position Funktion ist also Entwickelt, um verwendet zu
werden, wenn die Positionierungsfunktion die Position festlegt.
Sie verwenden also fset position und dann verwenden Sie fget position
in Kombination damit.
Also die Fget Position Funktion speichert die aktuellen Positions- und
Dateistatusinformationen für die Datei und positionieren und Null
zurückgeben, wenn die Operation erfolgreich ist, gibt a zurück Ganzzahl ungleich Null für Fehler.
So können Sie eine erstellen Variable vom Positionstyp s.
Und hier sagen wir, es ist nur hier.
Dann nennen wir fget position.
Wir geben in unserem Dateizeiger und an Wir geben in unserem f-Positionstyp an.
Wir müssen das kaufmännische Und, das Adresse von, weil es kein Zeiger ist.
Also in diesem Fall der Strom Die Dateiposition befindet sich in der
Variablen Hallo oder hier.
Sie müssen also eine Variable deklarieren vom Typ f Position t, weil
das ist, was Sie in Ihrem übergeben Parameter, Ihr zweiter Parameter.
Sie können einen Zeiger des deklarieren Geben Sie f position t star ein,
da keine Erinnerungen vorhanden sind zugeordnet, um die Positionsdaten zu speichern.
Schauen wir uns also ein Beispiel an das wird viel sinnvoller.
In diesem Fall erstellen wir unsere Datei Zeiger, wir erstellen unsere Position vom
Typ f Besitz, wir nennen offen und dann nennen wir fget position.
Und wir geben unsere Akte weiter Zeiger in unserer Endposition.
Da sind wir also Speichern der Position.
Wir werden das bekommen Position, wo wir sind.
Wenn wir dann f put s sagen, Wir schreiben einige Daten an den
Ort, an den wir umziehen.
Also nochmal, f Position bekommen und ftell sagt Ihnen, wohin Sie tatsächlich schreiben oder von wo
Sie lesen möchten.
Es ist irgendwo in der Mitte.
Es ist nicht am Anfang, es ist nicht am Ende.
Du bewegst dich.
Sie bewegen sich normalerweise mit einer Suche oder Sie bewegen sich mit etwas anderem,
bekommen Position und das sagt dir, wo du bist.
Also fget position und ftell ist Ich werde Ihnen genau sagen, wohin Sie
zeigen, und das bedeutet, dass Sie sich woanders bewegen können
und lesen können.
Stellen Sie nun eine Position in a ein Datei bis zu diesem Punkt lesen
wir nur, wo wir sind.
Wir werden nicht wirklich lesen Wo wir uns gerade befinden, haben wir gelesen
und geschrieben, es sei denn, wir haben etwas festgelegt.
Also als Ergänzung zu ftell, du hast auch fseek.
Und fseek wird es dir erlauben Bewegen Sie sich irgendwo für Ihre Position.
Es wird ein int zurückgegeben.
Es gibt einen Dateizeiger zurück, einen langen fset und ein ganzzahliges Original.
Der erste Parameter ist ein Zeiger zu der Datei, die Sie neu positionieren.
Der zweite und dritte Parameter definieren wohin Sie in der Datei gehen möchten.
Der zweite Parameter ist ein Versatz, bei dem ein Referenzpunkt
durch den dritten Parameter angegeben wird.
Der Referenzpunkt kann einer sein von drei Werten, die Sie
durch die vordefinierten Namen angegeben haben.
Suche Set, suche Strom und suche Ende.
Suchsatz definiert die Anfang der Datei.
Seek cur definiert den Strom Position in der Datei und Suche Ende
definiert das Ende der Datei.
Also für eine Textmodusdatei, Das zweite Argument muss ein von ftel
zurückgegebener Wert sein.
Das sollten Sie also bei fseek bemerken und ftel, sie werden zusammen verwendet.
Also das dritte Argument für Text Modus-Dateien müssen Suchsatz sein.
Für Textdateien alle Vorgänge mit fseek werden mit Bezug auf den Anfang
des durchgeführt Datei für Binärdateien, über die wir nicht wirklich
viel gelernt haben.
Aber für Binärdateien ist die Das Offset-Argument ist einfach
eine relative Byteanzahl.
Sie können daher liefern positive oder negative Werte für
den Offset bei der Referenz Punkt wird als Suchkurve angegeben.
Schauen wir uns also ein Beispiel an.
Hier in diesem Beispiel wieder machen wir die fputs.
Also schreiben wir einige Daten an unsere Datei, und dann verwenden wir fseek.
Fseek wird dich bewegen.
Hier heißt das, dass du bist Wenn wir sieben Bytes verschieben, verwenden wir
den Suchsatz, um zu sagen, dass wir wollen von Anfang an irgendwohin
sieben Bytes zu verschieben.
Und wir können uns von der bewegen Anfang der Datei mit
sieben Bytes, die sie verschieben werden.
Nach sieben Bytes können wir dann schreibe tatsächlich Daten darauf.
Und das könnten wir auch Verwenden Sie ftell, um zu sehen, dass oh nach
sieben Bytes, wo wir sind.
Sie können die Informationen verwenden, um von dort zurückholen, wo Sie sind.
Wieder der springende Punkt der Suche und das fgets ist, dass Sie entweder sehen,
wo Sie sich befinden, um anzugeben wo Sie schreiben oder lesen möchten.
Also wird fseek s tatsächlich gehen Verschieben Sie die Position. Tell sagt Ihnen,
wo Sie sich befinden.
Fset Position ist auch wie Fseek.
Aber fset position ist a etwas komplizierter.
Es wird mit der fset Position gehen.
Also fset get get position ist auch sehr ähnlich zu fset position.
Mit der Fset-Position ist es Gibt den ersten Parameter als Zeiger auf
die geöffnete Datei an.
Der zweite Parameter ist a Zeiger vom Typ f Position t.
Die Position, die gespeichert wird an der Adresse
wurde erhalten, indem fget Position enthalten wurde.
Fset position hat also Ihre Datei Zeiger und dann Ihre eigentliche Variable.
Und die Variable hier war vorher durch einen Aufruf auf fget position gesetzt.
Wieder wirst du verwenden fset und fget zusammen.
Die fset-Position gibt a zurück Wert ungleich Null bei Fehler oder
Null bei Erfolg.
Diese Funktion ist ausgelegt um mit einem Wert zu arbeiten,
der von der fget-Position zurückgegeben wird.
Sie können es also nur verwenden, um zu einem zu gelangen Nummer in einer Datei, um einen Platz in der Datei zu
erhalten, die Sie zuvor waren.
Mit Fseek können Sie zu jedem gehen Position nur durch Angabe
des entsprechenden Versatzes.
Hier sehen wir also so aus, wie wir es haben unsere f Position t Typ Position.
Wir öffnen unsere Akte und dann nennen wir fget position.
In der Fget-Position spezifizieren wir wo wir den Zeiger
bewegen wollen, wo wir eigentlich sind Lesen oder Schreiben in der Datei.
Dann verwenden wir fputs zu wohin wir es auch verlegt haben.
Und dann geht die Fset-Position zu Stellen Sie wieder etwas Spezielles ein, an das wir
schreiben möchten, und dann schreibe es von wo immer wir wollen.
Also mit all diesen Funktionen, Sie möchten tatsächlich sehen, wohin Sie
zeigen.
Dies wird viel einfacher zu Verstehe, sobald wir unsere Herausforderung haben.
Also mit Lesen und Schreiben, Sie Ich möchte immer irgendwohin gehen, an den Punkt,
an den Sie schreiben.
Du willst nicht immer schreiben für den Anfang oder das Ende.
Und so sind diese Funktionen sehr nützlich, um zu verschieben, wo Sie
irgendwo in einer Datei positionieren möchten.
Vielen Dank