Hallo, en welkom terug.
In deze lezing wil ik praten over bestandspositionering, eigenlijk enkele functies
waarmee u om de positie van een bestand te wijzigen.
Dus voor veel toepassingen ga je om toegang te hebben tot gegevens in een
ander bestand dan in sequentiële volgorde.
Volgorde begint aan het begin en dan byte
voor byte naar het einde toe.
Dat is niet altijd handig omdat misschien wil je echt naar het midden
van een bestand gaan en gegevens pakken of at het einde van het bestand en pak gegevens.
Het hangt allemaal af van de toepassing.
Je wilt niet altijd gaan van het begin tot het eind.
Er zijn dus verschillende functies die u kunt gebruiken om toegang te
krijgen tot gegevens in willekeurige volgorde.
Er zijn twee aspecten: van bestandspositionering.
Een daarvan is uitvinden waar je bent zijn in een bestand en de andere gaat
naar een bepaald punt in een bestand.
Dat zijn echt de twee dingen die je wil weten wanneer
je het hebt over bestanden en de positionering van a bestand, waar het eigenlijk naar verwijst.
Nogmaals, waar je bent in het bestand zelf en of u al dan niet ergens
anders in het bestand wilt gaan.
U kunt het bestand dus openen op: een willekeurige positie, ongeacht of u
het bestand opent, u kunt uw bestandspartner verplaatsen.
U hoeft de niet te openen bestand om te wijzigen waar u bent om
te zien waar u bent.
Dus uitvinden waar je bent we gaan het eerst hebben over.
Je hebt twee functies om te vinden: uit waar u zich in een bestand bevindt.
heet ftel en één is genaamd fgetpos, fget positie.
Voor ftell, de eigenlijke functie: definitie is vrij eenvoudig.
Je keert terug en je neemt een bestandsaanwijzer.
En deze functie gaat accepteren een bestandsaanwijzer als argument en
het retourneert het lange gehele getal waarde die de tekenpositie in het bestand
aangeeft, dus het is zal je de positie vertellen.
U kunt het gebruiken door een te maken variabele in dit geval fpos, die gaat
naar wat gaat krijgen geretourneerd en vervolgens die
bestandsaanwijzer doorgeven en ftel aanroepen.
De f-positievariabele geldt nu de huidige positie in het bestand en u
kunt het gebruiken om terug te keren naar de positie op een later tijdstip.
Dus het zal je fpositie teruggeven.
Dit is de manier waarop je kunt krijgen de positie van het
huidige punt waarnaar u verwijst.
De waarde is de offset in bytes vanaf het begin van het bestand.
Dus het is heel eenvoudig om gebruik pass in je aanwijzer, het zal
terugkeren en je vertellen waar je bent zijn in uw bestand gebaseerd op in principe vanaf
het begin van het bestand tot hoeveel bytes vanaf het begin.
Dus in dit voorbeeld creëren we een bestandsaanwijzer met de naam fp en we maken een
geheel getal met de naam lengte.
We gaan het bestand openen, en dit zou alleen voor lezen zijn.
We gaan maken zeker dat het niet nul is.
Als dat zo is, gaan we om een fout te retourneren.
En maak je dan geen zorgen over de fseek.
De fseek gaat eigenlijk gewoon om naar het einde van het bestand te gaan.
Dit is een andere functie die ons helpt.
Ik gebruik het alleen om demonstreren de ftel.
Fseek gaat naar het einde van het bestand, en dan
zeg je ftell fp, en dat gaat om je te vertellen dat je in principe aan het einde
van het bestand komt.
Dus de link die wordt geretourneerd staat aan het einde van het bestand.
En dus wat er gaat gebeuren is het gaat de totale
grootte van het bestand retourneren op basis van lengte omdat je je aanwijzer naar het einde hebt verplaatst en
dan heb je zei waar ben ik en het zei dat je aan het einde
bent, dus keer het einde terug.
En het einde is het aantal bytes vanaf het moment dat u voor het laatst hebt gelezen.
Dus laten we dit eens van binnen bekijken van onze mooie IDE onze codeblokken.
Dus hier is ons coderingsvoorbeeld: waar we onze bestandsaanwijzer maken.
We zetten het op null, make zeker dat het niet nul is.
We proberen het te openen.
En dan doen we een fseek wat gewoon is gaan onze bestandsaanwijzer wijzigen.
Ftel gaat het ons vertellen waar we naar verwijzen.
Dus het gaat wijzen naar de einde en het zal een willekeurig
aantal bytes tot het einde zijn.
Wat ga je doen als we dit uitvoeren? om op te merken is dat het 24 bytes weergeeft.
Dus dat betekent dat je aan het einde van de bestand omdat het bestand een klein bestand is
en het bestand slechts 24 bytes bevat.
Meestal gebruik je ftel na je hebt wat geschreven of gelezen of nadat je
het hebt gedaan in fseek waar je ergens naartoe bent verhuisd.
Maar het is heel eenvoudig om ftel . te bellen met de bestandsaanwijzer en
dan vertelt len je gewoon waar je bent.
Je kunt ook de fget . gebruiken positie of fgetpos-functie.
En dit is een tweede functie het verstrekken van informatie over
de huidige bestandspositie.
Het is een beetje meer ingewikkelder dan ftel.
Dit geeft een geheel getal terug.
Er is een bestandsaanwijzer voor nodig en het is neemt ook de f positie t type.
Dus de eerste parameter is die bestandsaanwijzer, zodat u weet naar
welk bestand u moet lezen.
De tweede parameter is een pointer naar a type dat is gedefinieerd in standardio. H.
Het f-positie t-type kan elke positie in een bestand opnemen.
Dus fget positie functie is ontworpen om te
worden gebruikt wanneer de positioneringsfunctie fset position.
U gebruikt dus de fset-positie en dan gebruik je fget position
in combinatie daarmee.
Dus de functie fget positie slaat de huidige positie en
bestandsstatusinformatie op voor het bestand en positioneer en
retourneer nul als de bewerking succesvol is, retourneert a niet-nul gehele waarde voor mislukking.
U kunt dus een maken variabele van het type positie.
En hier zeggen we dat het gewoon hier is.
Dan noemen we fget positie.
We specificeren in onze bestandsaanwijzer, en we specificeren in ons f-positietype.
We moeten de ampersand doorgeven, de adres van omdat het geen pointer is.
Dus in dit geval is de huidige bestandspositie is in de
variabele hallo of hier.
Dus je moet een variabele declareren van type f positie t want
dat is wat je doorgeeft in je parameter, uw tweede parameter.
U kunt een aanwijzer van de . declareren typ f positie t ster omdat
er geen herinneringen zullen zijn gekoppeld om de positiegegevens op te slaan.
Dus laten we naar een voorbeeld kijken dit zal veel logischer zijn.
In dit geval maken we ons bestand pointer, we creëren ons f bezit
t type positie, we noemen open en dan noemen we fget positie.
En we passeren in ons bestand wijzer in onze eindpositie.
Dus dat is waar we zijn het opslaan van de positie.
We gaan de halen positie waar we zijn.
Als we dan zeggen f zet s, we schrijven wat gegevens naar
waar we ook heen gaan.
Dus nogmaals, f krijg positie en ftell vertelt je waar je naartoe wilt schrijven
of lezen.
Het zit ergens in het midden.
Het is niet in het begin, het is niet aan het einde.
Je gaat verhuizen.
Je verplaatst je meestal met een zoekopdracht of je beweegt met iets anders,
krijg positie en dat vertelt je waar je bent.
Dus fget positie en ftell is ga je precies vertellen waar je naar verwijst,
en dat betekent dat je ergens anders heen kunt gaan en dat
je kunt lezen.
Nu een positie instellen in a bestand tot nu toe, we lezen
alleen waar we ons bevinden.
We gaan niet echt lezen waar we zijn, tenzij we
iets instellen, hebben we gelezen en geschreven.
Dus als aanvulling op ftell, je hebt ook fseek.
En met fseek kun je ergens heen gaan voor je positie.
Het retourneert een int.
Het retourneert een bestandsaanwijzer, een lange fset en een integer origineel.
De eerste parameter is een pointer naar het bestand dat u verplaatst.
De tweede en derde parameters definiëren waar u heen wilt in het bestand.
De tweede parameter is een offset waar een referentiepunt
gespecificeerd door de derde parameter.
Het referentiepunt kan één zijn van drie waarden die u hebt
opgegeven door de vooraf gedefinieerde namen.
Zoek set, zoek stroom en zoek einde.
Zoekset definieert de begin van het bestand.
Seek cur definieert de stroom positie in het bestand en zoekeinde definieert
het einde van het bestand.
Dus voor een tekstmodusbestand, het tweede argument moet een waarde zijn die
wordt geretourneerd door ftel.
Dus je zou moeten opmerken dat met fseek en ftel, ze worden samen gebruikt.
Dus het derde argument voor tekst mode-bestanden moeten zoeken zijn ingesteld.
Voor tekstbestanden, alle bewerkingen met fseek worden uitgevoerd met verwijzing naar het begin
van de bestand voor binaire bestanden waar we niet echt veel
over hebben geleerd.
Maar voor binaire bestanden is de offset argument is gewoon
een relatief aantal bytes.
U kunt dus leveren positieve of negatieve waarden voor
de offset wanneer de referentie punt is gespecificeerd als zoekcur.
Laten we dus naar een voorbeeld kijken.
Hier in dit voorbeeld, nogmaals, we doen de fputs.
Dus we schrijven wat gegevens naar onze bestand, en dan gebruiken we fseek.
Fseek gaat je verplaatsen.
Hier is dit te zeggen dat je bent gaan zeven bytes verplaatsen en we gebruiken
seek set om te zeggen dat we willen om vanaf het begin ergens in
principe zeven bytes te verplaatsen.
En we kunnen verhuizen van de begin van het bestand met
zeven bytes dat het gaat verplaatsen.
Na zeven bytes kunnen we dan daadwerkelijk data naar schrijven.
En we zouden ook in staat zijn om gebruik ftell om te zien dat oh na
zeven bytes waar we zijn.
U kunt de informatie gebruiken om terughalen van waar je bent.
Nogmaals, het hele punt van de fseek en de fgets is dat je ofwel ziet waar je
je bevindt om op te geven waar u naartoe wilt schrijven of lezen.
Dus fseek s gaat eigenlijk verplaats de positie, tell vertelt u
waar u zich bevindt.
Fset-positie is ook als fseek.
Maar de positie van fset is een beetje ingewikkelder.
Het past bij de fset-positie.
Dus fset get-positie is ook lijkt erg op de fset-positie.
Met de fset-positie is het specificeert de eerste parameter als een verwijzing
naar het geopende bestand.
De tweede parameter is a aanwijzer van het f-positie t-type.
De positie die wordt opgeslagen op het adres
werd verkregen door fget position te bevatten.
Dus de fset-positie heeft uw bestand pointer en vervolgens uw werkelijke variabele.
En de variabele hier was eerder ingesteld door een oproep naar positie fget.
Nogmaals, je gaat gebruiken fset en fget samen.
De fset-positie keert terug a niet-nulwaarde bij fout of nul wanneer
deze succesvol is.
Deze functie is ontworpen: om te werken met een waarde
die wordt geretourneerd door fget position.
Je kunt het dus alleen gebruiken om bij een nummer in een bestand om een plaats in het bestand te krijgen
waar je eerder bent geweest.
Met Fseek kun je naar elke door de juiste offset op
te geven.
Dus hier zien we eruit alsof we hebben onze f positie t type positie.
We openen ons bestand en dan noemen we fget positie.
In fget-positie specificeren we waar we de aanwijzer willen
verplaatsen, waar we eigenlijk zijn lezen of schrijven in het bestand.
Dan gebruiken we fputs om waar we het ook naartoe hebben verplaatst.
En dan gaat de fset-positie naar stel opnieuw iets specifieks in waar we naartoe willen
schrijven en dan schrijf het van waar we maar willen.
Dus met al deze functies, je wilt echt zien waar je naar
verwijst.
Dit wordt veel gemakkelijker om begrijpen als we eenmaal onze uitdaging hebben.
Dus met lezen en schrijven, altijd ergens heen wilt gaan naar het punt
waarnaar u schrijft.
Je wilt niet altijd schrijven voor het begin of het einde.
En dus zijn deze functies erg handig om te verplaatsen waar u
maar wilt in een bestand.
Dank u