Hallo, en welkom terug.
In deze lezing wil ik praten over toegang tot bestanden.
Dus bestanden op schijf hebben een naam en de regels voor het benoemen van de
bestanden worden bepaald door uw besturingssysteem.
Misschien moet je je aanpassen de namen afhankelijk van het besturingssysteem
dat uw programma draait.
Als uw programma op Windows draait versus Linux, is de
feitelijke directorystructuur ook anders.
Dus als je voorwaartse slashers gebruikt of backward slashes, dan moet je
dit in je programma aanpassen.
Maar voor het grootste deel zijn de namen hebben
relatief dezelfde naamgevingsregels, enzovoort.
Maar er is een kans dat je zou het moeten aanpassen.
Een programma verwijst naar een bestand via een bestandsaanwijzer of een stroomaanwijzer.
Omdat het werkt op meer dan alleen een bestand,
dat kan eigenlijk, we noemden dit eerder, maar de standaard io-functies werken op elk apparaat.
Dus het heet een bestandsaanwijzer, maar het zou eigenlijk een streampointer
moeten worden genoemd.
U associeert een bestandsaanwijzer met een bestand programmatisch wanneer uw
programma wordt uitgevoerd.
Dus wat je uiteindelijk doet, is dat je maak een aanwijzer in je
programma, het zal van het type bestand zijn en dat zal het bestand vertegenwoordigen wanneer u het
leest en ernaar schrijft.
We gebruiken deze bestandsaanwijzingen als a effectievere manier om daadwerkelijk naar de bestanden te verwijzen in plaats van
aan de naam omdat de naam een beetje
anders kan zijn.
De aanwijzer zal vertegenwoordigen waar het eigenlijk naar verwijst.
En u kunt de wijzers hergebruiken, om bij verschillende gelegenheden
naar verschillende bestanden te verwijzen, wat opnieuw werd vertegenwoordigd door de bestandsnaam.
Een bestandsaanwijzer wijst naar een structuur type bestand dat een stream vertegenwoordigt.
Je kunt echt gaan kijken bij de bestandsstructuur om alles te
zien wat erin staat.
Maar het bevat informatie zoals of u het bestand nu wilt
lezen of schrijven of bijwerken, de adres van de buffer in het geheugen waar
u gegevens opslaat, a aanwijzer naar de huidige positie in het
bestand voor de volgende bewerking.
We noemden de positie is belangrijk omdat
je daar schrijft en leest.
En u kunt al deze informatie instellen binnen de structuur met
behulp van invoer- en uitvoerbestandsbewerkingen.
De bewerkingen van het invoeruitvoerbestand, wanneer je een bestand opent, zal het daadwerkelijk
specificeren of u wilt lezen of schrijven.
En dan kun je ook de huidige positie door andere methoden te gebruiken,
zoals zoeken, enzovoort waar we het over gaan hebben.
Als u meerdere bestanden wilt gebruiken gelijktijdig in uw programma,
moet u een aparte bestandsaanwijzer voor elk bestand.
Je kunt het bestand alleen hergebruiken aanwijzer als u op verschillende tijden
leest en schrijft.
Er is een limiet aan het aantal open bestanden die u tegelijkertijd kunt openen.
U kunt kijken naar de limiet in de standaard IO, er
is een constante gedefinieerd f open max it all hangt weer af van het besturingssysteem
waarop u draait.
Maar je wilt meestal niet creëren en open een heleboel bestanden tegelijk.
Het schrijven en lezen van de bestanden is een dure operatie omdat je op
de harde schijf schrijft.
Het is niet zo snel als schrijven het
geheugen, dus het kost tijd en het kan uw programma veroorzaken minder responsief zijn.
Je wilt geen 10 . hebben bestanden openen
en schrijven op 10 bestanden tegelijk.
Om een bestand te openen, zou dit: de eerste stap zijn die u
doet voordat u leest en schrijft.
Dus je wilt een specifieke . koppelen externe bestandsnaam
met een volledige laatste aanwijzer door een proces het openen van het bestand genoemd.
De manier waarop u een bestand opent en zie je roept f open functie.
Dit zal het bestand teruggeven aanwijzer die u vervolgens kunt
gebruiken voor lezen en schrijven.
En nogmaals, de bestandsaanwijzer is gaan verwijzen naar een specifiek extern
bestand dat zich op de schijf bevindt.
F open gaat duren de naam van het bestand.
De f open is wat je moet doen voordat u gaat lezen/schrijven.
Het is meestal uw eerste operatie.
En zoals bij de meeste van deze functies, ze zijn allemaal gedefinieerd in standardio. H.
Hier is de definitie van de f open oproep.
Je zult zien dat de terugkeer waarde is een bestandsaanwijzer,
het zijn allemaal hoofdletters, de bestandsstructuur.
Dus all caps-bestand.
Je zult dan merken dat het een koppel parameters, er is een naam
en een modus voor nodig en maak je hier geen zorgen over beperken dat is gewoon meer C11-dingen.
Het duurt echt gewoon het karakter verwijzing naar een naam en een modus.
Het eerste argument van de functie is een aanwijzer naar een
tekenreeks die de naam van het bestand is, zodat zal tussen dubbele aanhalingstekens staan.
U kunt de naam expliciet specificeren of gebruik een tekenaanwijzer die het adres van
de tekenreeks bevat.
Dus dit alles zegt dat je het zou kunnen maak een tekenreeks aan en wijs
deze toe aan letterlijke tekst en dan geef de string door
aan de functie of je kunt het in de double plaatsen aanhalingstekens binnen de functieaanroep.
U kunt de bestandsnaam verkrijgen via de opdrachtregel ook als
invoer van de gebruiker of definieer het als een constante uw programma.
Als het altijd hetzelfde bestand is je leest naar en de
naam doet er niet toe, jij kan gewoon verwijzen naar een constante.
Als uw programma flexibeler is, is het kan input van de gebruiker krijgen om te zeggen wat je
wilt lezen of schrijven.
Het tweede argument voor de f open functie is een tekenreeks
die de bestandsmodus vertegenwoordigt.
Dit specificeert wat u wilt doen met het bestand, of u
het nu wilt lezen, of u wilt schrijven naar het, of u het wilt toevoegen.
Een bestandsmodusspecificatie is: een tekenreeks tussen dubbele aanhalingstekens,
en ik zal het laten zien u enkele van degenen die
we veel gaan gebruiken.
Ervan uitgaande dat de oproep naar f open succesvol is, retourneert het
die bestandsaanwijzer, allemaal in hoofdletters.
En dan kun je dit bestand gebruiken aanwijzer om andere invoer-/uitvoerfuncties in de standaard
IO-header aan te roepen, en die gaan we doornemen als we lezen en
schrijven of je kunt de positie ook krijgen door die aanwijzer
te gebruiken om de positie van waar u zich in het bestand bevindt.
Als het bestand niet kan worden geopend om de een of andere reden zal
f open null retourneren.
Dus wat dit betekent, ligt voor je beginnen met lezen of
schrijven, zorg ervoor dat de aanwijzer niet is gelijk aan null, een andere als check.
Hier zijn het bestand modi die ik noemde.
De bestandsmodi, onthoud, zijn de tweede parameter voor de f open oproep.
Dit is wat u specificeert wilt doen met het bestand, en
het staat allemaal tussen dubbele aanhalingstekens.
Dus als je een w doet, betekent dat dat je wilt om het tekstbestand te openen om te schrijven.
Als je een a doet, betekent dat dat je wilt om het tekstbestand te openen om toe te voegen, zijn
alle schrijfbewerkingen aan het einde van het bestand.
Als je een r doet, gaat het open het tekstbestand om te lezen.
Als je een plus toevoegt aan een van deze, zal het in feite het bestand maken
als het niet bestaat.
Dus als je een w plus-bestand opent, het zal het openen voor update en het zal het
bestand afkappen tot nul als het bestaat of het kan een nieuw bestand maken
als het niet bestaat.
Bij de andere is het um gaat schrijven of lezen en het
bestand moet bestaan.
Hetzelfde met een plus, het gaat open het omhoog om toe te voegen, voor een update, aan het einde
van het bestaande bestand of maak het bestand aan als het niet bestaat.
En de r plus gaat open het tekstbestand voor update, het gaat
het bestand niet maken daar omdat het leeg zal zijn.
Dus het lezen is alleen voor zowel lezen als schrijven als je
de r plus ziet.
Een beetje anders dan de andere plussen waar ze het bestand
daadwerkelijk maken, bestaat het niet.
Schrijf modus.
Als je wilt schrijven naar een bestaand tekstbestand
met de naam mijnbestand. txt, zou je maken uw bestandsaanwijzer, allemaal hoofdletters.
Zet het op nul, initialiseer het de null.
En dan zou je misschien creëren uw bestand
als een andere tekenaanwijzer, mijnbestand. txt of je zou kunnen geef dat door als de eerste parameter,
en dan zeg je gewoon f open.
F open bestandsnaam en dan w inside dubbele aanhalingstekens die het bestand openen om te
schrijven en het retourneert een bestandsaanwijzer.
Daarom heb je p-bestand op links van de opdracht.
U wilt dan controleren om te maken zeker dat p-bestand niet gelijk is aan null.
Want als het nul is, als het kon om welke reden
dan ook niet worden geopend, misschien was de bestandsnaam verkeerd of het niet bestond, dan zou je er
niet naar kunnen schrijven.
Dus je wilt altijd de f controleer en print wat
informatie als het niet wordt geopend.
Deze code opent het bestand en het zal het
bestand associëren met de naam mijnbestand. txt met uw bestand pointers fp-bestand.
De modus w betekent dat we alleen kunnen schrijven naar het bestand, kunt u er niet uit lezen.
Als een bestand met de naam mijn bestand die tekst niet bestaat, zal
de oproep om f te openen een nieuwe . maken
bestand met deze naam, en dat is voor f open met de w optie.
En dus toen we zagen in de vorige modes, w plus zal het bestand maken als het niet bestaat,
maar het kapt het bestand ook af tot nul.
Dat is het verschil met de w.
De w zal maken als het bestaat niet, maar het zal
het niet afkappen tot nul.
Dit is dus de standaardmanier voor: bestanden openen, met die
w tussen de dubbele aanhalingstekens.
Als u alleen de bestandsnaam opgeeft zonder enige padspecificatie,
dus dat hebben we hierin gedaan een pad onthouden is
bijvoorbeeld de naam van de mappen.
Als u de naam van de . niet opgeeft directory's, gaat het ervan uit dat dat
bestand zich in de huidige directory bevindt waar het programma ook wordt uitgevoerd.
Als je echt wilt openen een bestand ergens anders
openen waar het zich niet echt bevindt de programmadirectory, dan moet u
het volledige pad specificeren.
Dat heet het absolute pad.
Als je geen pad opgeeft, is dat meestal het relatieve pad, het is relatief ten
opzichte van waar het programma draait.
U kunt dus een van beide specificeren, de absoluut of het relatieve
pad, zorg ervoor dat u weet waar het zich bevindt en je doet de goede.
Relatieve paden zijn meestal beter want dan is het niet afhankelijk.
Als iemand zou zijn verhuisd dat bestand is niet afhankelijk
van waar het is verplaatst.
En je kunt eigenlijk een relatief pad, en je kunt teruggaan naar mappen, zodat
je een punt kunt maken schuine streep en dat is relatief ten opzichte van waar
het programma draait, je bent gewoon een paar mappen teruggaan.
Wanneer u een absoluut . gebruikt pad, zou het
eigenlijk zoiets zijn als c dubbele punt-programma bestanden als u Windows gebruikt.
En als dat bestand ooit is verplaatst, is de programma zou het niet kunnen openen.
Dus bij het openen van een bestand om te schrijven de bestandskoppeling
wordt afgekapt tot nul, en de positie wordt aan het begin van alle bestaande
gegevens voor de eerste bewerking.
Alle gegevens die eerder waren die naar het bestand zijn
geschreven, gaan verloren en worden overschreven door eventuele schrijfbewerkingen.
Dus nogmaals zonder te verstrekken de plus erop, het betekent gewoon dat je
niet kunt lezen en schrijven.
Dit is alleen schrijven.
W heeft alleen gelijk.
W plus betekent dat je kunt lezen en schrijven.
Modus toevoegen.
Als u wilt toevoegen aan een bestaande tekstbestand in plaats van het te overschrijven,
kunt u de a-modus specificeren.
Dit is afhankelijk.
Dit plaatst het bestand aan het einde van alle eerder geschreven gegevens.
Als het bestand niet bestaat, het creëert een nieuwe.
Het voorbeeld hier ben jij gewoon verander de tweede parameter in een a tussen dubbele
aanhalingstekens, it zal toevoegen aan het einde van mijn bestand. tekst.
En vergeet niet dat je moet altijd de geretourneerde
waarde voor null elke keer testen.
Je wilt altijd de if . doen p-bestand is niet gelijk aan null.
Wanneer u een bestand opent in append modus, zijn alle schrijfbewerkingen
aan het einde van de gegevens in het bestand bij elke schrijfbewerking.
Alle schrijfbewerkingen append gegevens naar het bestand, en u
kunt de bestaande inhoud niet bijwerken in deze modus, het is allemaal aan het einde.
In leesmodus kunnen we openen het bestand omhoog om een bestand te lezen.
We gebruiken gewoon de r tussen dubbele aanhalingstekens.
Dit is alleen-lezen, jij kan niet naar het bestand schrijven.
Als je r plus doet, zou je dat doen kunnen lezen en schrijven.
Dus het lijkt op de andere oproepen, je doet gewoon een f open, geef
de naam van het bestand door en dan r in double aanhalingstekens die een bestandsaanwijzer retourneren.
We zullen het bestand ook positioneren naar het begin van de gegevens.
Als je gewoon gaat lezen het bestand, moet het al bestaan.
Je gaat niet lees een leeg bestand.
Er is dus geen optie om te creëren het bestand bestaat niet, het
zal gewoon leeg zijn of je zou terug komen het bestand tegenstander zou nul zijn.
Als u een bestand probeert te openen voor lezen dat het
niet bestaat, zal de null-aanwijzer terugkeren.
Als het bestaat en het is leeg, u retourneert gewoon geen gegevens.
U wilt altijd de waarde terugkeer van f open.
Nogmaals, ik lees dat voor de tweede keer, het is belangrijk.
Want als het een null-pointer is, je programma gaat crashen,
het gaat iets slechts doen.
Een bestand hernoemen.
We weten nu hoe we een bestand moeten openen.
Een bestand openen is de eerste bewerking, specificeert u de modus
en de naam van het bestand.
Dat geeft je het bestand terug aanwijzer die u nu kunt
gebruiken om andere dingen mee te doen.
Het hernoemen van een bestand is soms belangrijk.
Het is erg makkelijk.
Je gebruikt gewoon de functie hernoemen.
Er is een oude naam en een nieuwe voor nodig name als constante
tekenaanwijzers, en het retourneert een int.
Het gehele getal dat wordt geretourneerd zal nul zijn als
de naamswijziging succesvol was en anders niet nul zijn.
Het bestand mag niet geopend zijn als je hernoemt.
Anders gaat het mis omdat het in gebruik is, kunt u de naam van een bestand
niet wijzigen wanneer het in gebruik is.
Dus wat je hier kunt doen, is dat je het kunt zeg gewoon hernoemen, geef de oude bestandsnaam
en de nieuwe bestandsnaam door.
In dit voorbeeld gebruiken we een pad naar een bestand in Windows.
En dat je weet dat het is windows omdat ik dubbele punt zie.
Je merkt ook dat de backslash is er twee keer.
De reden daarvoor is dat de backslash is een speciaal teken in c.
Backslash n is een regelterugkoppeling.
Backslash r is een regelterugloop.
Dus de backslash heeft een speciale betekenis in het programma.
Dus als je de . wilt gebruiken backslash voor een pad in een
map, wat Windows doet, jij moet er twee leveren.
En dus hernoemen we hier een mijnbestand. txt om de tijdelijke map
te vinden.
We hernoemen het naar mijn bestandsonderstrepingsteken kopiëren. tekst in de poging directory.
En als dat niet gelijk is voor één zal het mislukken.
We printen gewoon een output die zegt dat het is mislukt.
Anders is uw afdruk geslaagd.
Dit gaat het veranderen naam van mijn bestand. txt in de tijdelijke map naar mijn bestand kopiëren.
Als het bestandspad onjuist is of het bestand niet bestaat, kan
het niet worden hernoemd.
U kunt ook een bestand sluiten en u wilt om dit te doen wanneer u een bestand opent.
Dus als je klaar bent met de bestand zelf, wilt u
het besturingssysteem vertellen om dat bestand vrij te maken.
Onthoud, er is een limiet hoeveel bestanden u
op een bepaald moment open kunt hebben.
Dit kunt u doen door te bellen de f close-functie.
F close accepteert een bestand wijzer als argument.
Onthoud, de bestandsaanwijzer vertegenwoordigt het bestand.
Het geeft een eof terug.
Eof is een int.
Retourneert eof als er een fout optreedt.
Eof is een speciaal karakter het einde van het bestandsteken genoemd.
Het is gedefinieerd in standardio. H als een negatief geheel getal.
Het is meestal equivalent naar negatief.
Als f close succesvol was, het zal nul opleveren.
Dus je kunt controleren op eof voor mislukt.
Je zegt gewoon f close pass in de aanwijzer, kunt u de aanwijzer vervolgens instellen op
null en het resultaat van aanroepen f close is dat de verbinding tussen
de aanwijzer, het p-bestand en het fysieke bestand is verbroken.
P-bestand kan niet meer worden gebruikt om toegang te krijgen tot
het bestand voor lezen, schrijven of toevoegen of hernoemen.
Als er naar het bestand wordt geschreven, de huidige inhoud van de uitvoerbuffer wordt naar het
bestand geschreven om ervoor zorgen dat de gegevens niet verloren gaan.
Dus je hebt geen problemen met gegevensintegriteit, u gaat het bestand
niet echt sluiten als dat zo was wordt aangeschreven in een ander draadje.
Het is dus draadveilig.
We hebben het niet over draden gehad, dat is een meer geavanceerd concept.
Maar het is waar je er meerdere kunt hebben uitvoeringspunten in uw programma.
Het is een goede programmeerpraktijk om een bestand te sluiten zodra u
ermee klaar bent, net als het is een goede programmeerpraktijk om
geheugen vrij te maken als je klaar bent ermee, hetzelfde voor het sluiten van bestanden.
Het beschermt tegen verlies van uitvoergegevens.
Je moet ook een bestand sluiten voordat u probeert het
te hernoemen of te verwijderen, moet het gesloten zijn, kan het niet worden geopend.
Hoe zit het met het verwijderen van een bestand.
U kunt een bestand verwijderen door: de verwijderfunctie aanroepen.
Dit wordt ook in standardio aangegeven. H.
Alle bestandsbewerkingen zijn: standaard aangegeven. o.i.d.
Je kunt hier altijd naar gaan kijken header-bestand als
u wilt waar de c-headerbestanden zijn geïnstalleerd.
Dus je zegt gewoon verwijderen naam van het bestand.
Hier hoef je niet gebruik de bestandsaanwijzer.
Je kunt gewoon zeggen omdat het bestand hoeft niet echt
geopend te zijn om het te verwijderen.
Hetzelfde met de naam wijzigen omdat je wilt eigenlijk niet dat de bestanden open zijn
omdat de hernoem of het verwijderen zal mislukken.
Het gaat het bestand verwijderen die de naam mijnbestand heeft. txt uit de
huidige map.
Dit geeft een relatief pad.
Het gaat naar dat bestand zoeken waar het programma ook wordt uitgevoerd.
Anders moet je een absoluut pad bieden.
Het bestand kan niet worden geopend wanneer u probeer het te verwijderen, net zoals hernoemen.
Je moet altijd dubbel checken met bewerkingen die bestanden verwijderen.
Je zou je kunnen vernielen systeem als u dat niet doet.
Een delete is een erg dure, zeer gevaarlijke operatie.
Het verwijderen van bestanden kan problemen veroorzaken.
Dus wees voorzichtig.
Alle informatie in deze lezing te maken had met toegang tot bestanden, hoe je
bestanden kunt openen, wat: is wat u moet doen voordat u leest
en schrijft, en ook hoe u kan bestanden verwijderen en hernoemen en vervolgens sluiten wanneer u
klaar bent met ze te gebruiken.
Alles is gebaseerd uit die bestandsaanwijzer.
Dus begrijp die bestandsaanwijzer en de structuur die het bevat.
Best handig spul.
De standaard io-header bevat: alle geweldige informatie.
Volgende paar lezingen, we gaan om
te praten over lezen en schrijven naar tekstbestanden, eigenlijk toevoegen gegevens of het toevoegen of lezen ervan.
Dank u. Ik hoop dat dit nuttig was.