[Powered by Google Translate] [Tiedosto I / O] [Jason Hirschhorn, Harvardin yliopisto] [Tämä on CS50, CS50.TV] Kun ajattelemme tiedoston, mitä tulee mieleen on Microsoft Word-asiakirjan, JPEG-kuvan tai MP3 song, ja me vuorovaikutuksessa kukin näistä tyyppisiä tiedostoja eri tavoin. Esimerkiksi Word-asiakirjassa lisätä tekstiä mutta joiden JPEG-kuvan voisimme rajata reunoja tai korjailla värejä. Silti konepellin alle kaikki tiedostot meidän tietokone ei ole muuta kuin pitkä sarja nollia ja ykkösiä. Se on jopa erityinen sovellus vuorovaikutuksessa tiedosto päättää, miten käsitellä tätä pitkää järjestyksessä ja esittää sen käyttäjälle. Toisaalta, asiakirja, jossa voi tarkastella vain yhden tavun, tai 8 nollia ja ykkösiä, ja näyttää ASCII-merkin näytöllä. Toisaalta, bittikarttakuvana voi tarkastella 3 tavua, tai 24 nollia ja ykkösiä, ja tulkita niitä 3 heksadesimaaliluvut , jotka edustavat arvot punainen, vihreä ja sininen yhden pikselin kuvan. Mitä he voivat näyttää ruudulla, ytimessä, tiedostot ovat vain sarja nollia ja ykkösiä. Joten sukeltaa ja katsoa miten todella manipuloida näitä nollia ja ykkösiä kun se tulee kirjallisesti ja lukee tiedoston. Aloitan rikkomalla se alas yksinkertainen 3-osa prosessia. Seuraavaksi minä sukeltaa kahteen koodi esimerkkejä, jotka osoittavat nämä kolme osaa. Lopuksi, minä tarkastella prosessia ja joitakin sen tärkeimpiä yksityiskohtia. Kuten minkä tahansa tiedoston, joka istuu työpöydällä, ensimmäinen asia tehdä on avata se. C teemme tätä julistamalla osoitin ennalta struct joka edustaa tiedoston levylle. Tässä toiminto soittaa, me myös päättää haluamme kirjoittaa tai lukea tiedostosta. Seuraavaksi teemme varsinaisen lukemisen ja kirjoittamisen. On olemassa useita erikoistuneita toimintoja voimme käyttää tässä osassa, ja lähes kaikki heistä alkavat kirjaimella F, mikä tarkoittaa tiedostoa. Viimeinen, muistuttaa pieni punainen X yläkulmassa tiedostoja auki tietokoneessa, suljemme tiedoston lopullinen funktiokutsuna. Nyt meillä on yleinen käsitys siitä, mitä aiomme tehdä, Katsotaanpa sukeltaa koodi. Tässä hakemistossa, meillä on kaksi C-tiedostoja ja niitä vastaavat ohjelmatiedostoja. Kirjoituskone Ohjelma kestää yhden komentorivin argumentti, dokumentin nimi haluamme luoda. Tässä tapauksessa me kutsumme sitä doc.txt. Katsotaanpa suorita ohjelma ja anna pari riviä. Hei. Nimeni on Jason. Lopuksi, me kirjoita "lopeta". Jos me nyt luetella kaikki tiedostot tässä hakemistossa, näemme, että uusi asiakirja on olemassa nimeltään doc.txt. Tuo tiedosto ohjelman juuri luotu. Ja tietenkin, sekin on vain pitkä sarja nollia ja ykkösiä. Jos avaamme uuden tiedoston, näemme 3 riviä koodia solmimme ohjelmaamme - Hei. Toukokuu nimi on Jason. Mutta mitä todella tapahtuu kun typewriter.c toimii? Ensimmäinen rivi kiinnostaa meitä on linjan 24. Tätä linjaa, me tunnustamme tiedoston osoitin. Funktio, joka palauttaa tämä osoitin, fopen, ottaa kaksi argumenttia. Ensimmäinen on tiedoston nimi mukaan lukien tiedostotunniste tarvittaessa. Muistuttaa, että tiedostopääte ei vaikuta tiedostoa alimmillaan. Olemme aina tekemisissä pitkä sarja nollia ja ykkösiä. Mutta se vaikuttaa siihen, miten tiedostoja tulkitaan ja mitä sovelluksia käytetään avata niitä. Toinen argumentti fopen on yhden kirjaimen että tarkoittaa mitä aiomme tehdä, kun avaamme tiedoston. On kolme vaihtoehtoa tämän väitteen - W, R, ja A. Olemme valinneet w tässä tapauksessa, koska haluamme kirjoittaa tiedostoon. R, kuten arvata saattaa, on lukea tiedostoon. Ja on liittämässä tiedoston. Vaikka sekä w ja voidaan käyttää kirjallisesti tiedostoja, w alkaa kirjallisesti tiedoston alusta ja mahdollisesti korvaavat kaikki tiedot, jotka on aiemmin tallennettu. Oletuksena tiedosto avaamme, jos se ei vielä ole, luodaan nykyistä työhakemistossa. Kuitenkin, jos haluamme käyttää tai luoda tiedoston eri sijaintiin, on ensimmäinen perustelu fopen, voimme määrittää tiedoston polku lisäksi tiedoston nimen. Kun taas ensimmäinen osa tässä prosessissa on vain yksi rivi koodia pitkä, se on aina hyvä sisällyttää toinen joukko viivoja että tarkista että tiedosto on onnistuneesti avattu tai luotu. Jos fopen palauttaa null, emme halua edetä meidän ohjelmaan, ja tämä voi tapahtua, jos käyttöjärjestelmä on loppunut muisti tai jos yritämme avata tiedoston hakemistoon josta meillä ei ole oikeuksia. Osa kaksi prosessia tapahtuu kirjoituskoneella n kun silmukka. Käytämme CS50 kirjaston funktion saada panos käyttäjän ja olettaen, että ne eivät halua lopettaa ohjelman käytämme toimintoa fputs ottaa merkkijonon ja kirjoittaa se tiedostoon. fputs on vain yksi monista toiminnoista voisimme käyttää kirjoittaa tiedostoon. Toiset ovat fwrite, fputc, ja jopa fprintf. Riippumatta siitä nimenomaisesta funktion päädymme käyttäen, vaikka, ne kaikki täytyy tietää, kautta heidän perustelunsa, ainakin kaksi asiaa - mitä on kirjoitettu ja missä se on kirjoitettu. Tässä tapauksessa, tulo on merkkijono, joka on kirjoitettu ja FP on osoitin, joka ohjaa meitä, jos olemme kirjallisesti. Tässä ohjelmassa toinen osa prosessia on melko suoraviivainen. Olemme yksinkertaisesti ottaa merkkijonon käyttäjä ja lisäämällä se suoraan meidän tiedoston pikku-to-no input validointi tai turvatarkastuksia. Usein kuitenkin toinen osa vie pääosan koodisi. Kolmannessa osassa on linjalla 58, jossa suljemme tiedoston. Täällä me kutsumme FSulje ja siirtää se meidän alkuperäisen tiedoston osoitin. Myöhemmässä linjaa, palaamme nolla, signalointi loppuun ohjelmamme. Ja kyllä, osa kolme on niin yksinkertaista. Siirrytään lukemista tiedostoista. Takaisin meidän hakemistoon meillä tiedosto nimeltä printer.c. Katsotaanpa ajaa sen tiedoston me juuri luotu - doc.txt. Tämä ohjelma, kuten nimestä voi päätellä, yksinkertaisesti tulostaa tiedoston sisältö siirretään sille. Ja meillä on. Koodiriviä olimme kirjoitit aiemmin ja tallennettu doc.txt. Hei. Nimeni on Jason. Jos me sukeltaa printer.c, näemme, että monet koodi näyttää samanlaiselta kuin mitä vain käveli läpi typewriter.c. Itse linja 22, jossa avasimme tiedosto, ja linja 39, jossa suljetaan tiedosto, ovat lähes identtiset typewriter.c, paitsi fopen toinen argumentti. Tällä kertaa olemme lukee tiedostosta, joten olemme valinneet r sijaan w. Näin ollen, nyt keskittyä toinen osa prosessia. Linjassa 35, koska toinen ehto meidän 4 silmukan, me soittaa fgets, seuralainen toiminto fputs alkaen ennen. Tällä kertaa meillä on kolme argumenttia. Ensimmäinen on osoitin joukko merkkejä, jos merkkijono tallennetaan. Toinen on merkkien maksimimäärä voidaan lukea. Ja kolmas on osoitin tiedoston jonka pyrimme. Huomaat, että for-silmukka päättyy fgets palauttaa null. On kaksi syytä, että tämä on tapahtunut. Ensinnäkin, virhe on voinut tapahtua. Toiseksi, ja todennäköisesti, tiedoston loppuun päästiin, ja enää merkkejä luettiin. Vuonna Jos mietit, kaksi toimintoa ei ole, että voimme nyt kertoa minkä vuoksi on syynä tähän nimenomaiseen nollaosoittimen. Ja ei ole yllättävää, koska ne täytyy tehdä työtä tiedostoja, Sekä fError toiminto ja feof toiminta alkavat kirjaimella f. Lopuksi, ennen kuin päätellä, yksi nopea huomautus tiedoston loppuun toiminto, joka, kuten juuri mainitsin, on kirjoitettu feof. Usein löydät itsesi käyttäen aikaa ja silmukoita asteittain lukea läpi tiedostoja. Näin sinun tapa lopettaa nämä silmukat kun päähän näistä tiedostoista. Soittaminen feof teidän tiedoston osoitin ja tarkistaa, onko se totta tekisi juuri niin. Siten, kun silmukka on kunnossa (! Feof (fp)) saattaa tuntua täysin sopiva ratkaisu. Kuitenkin sanoa meillä on yksi rivi jää meidän tekstitiedosto. Me anna meidän taas silmukka ja kaikki toimii suunnitellusti. Seuraavalla kierroksella kautta, meidän ohjelma tarkistaa, onko feof FP on totta, mutta - ja tämä on ratkaisevaa ymmärtää täällä - se ei ole totta ihan vielä. Tämä johtuu tarkoituksena feof ei tarkistaa jos seuraava puhelu lukea toiminto osuu tiedoston loppuun, vaan tarkistaa, onko vai ei tiedoston loppuun on jo saavutettu. Tapauksessa tässä esimerkissä, lukemista viimeisellä rivillä meidän tiedosto menee täydellisesti sujuvasti, mutta ohjelma ei vielä tiedä, että olemme osuma loppuun meidän tiedoston. Se vasta se yksi ylimääräinen lukenut, että se laskurit tiedoston loppuun. Siten oikea ehto olisi seuraava: fgets ja sen kolme argumenttia - ulostulo, koko tuotannon, ja FP - ja kaikki, jotka eivät vastaa null. Tämä on lähestymistapa teimme printer.c, ja tässä tapauksessa, kun silmukka poistuu, voit soittaa feof tai fError ilmoittaa käyttäjälle erityiseen perusteluja poistutaan tämän silmukan. Kirjoittaminen ja lukeminen tiedostosta on, sen alkeellisinta, yksinkertainen 3-osa prosessia. Ensin avaamme tiedoston. Toiseksi, me laittaa asiat osaksi tiedoston tai viedä joitakin asioita pois. Kolmanneksi, suljemme tiedoston. Ensimmäinen ja viimeinen osa on helppoa. Keskiosa on silloin hankalaa kamaa piilee. Ja vaikka alla huppu olemme aina tekemisissä pitkä sarja nollia ja ykkösiä, se auttaa kun koodaus lisätä kerros abstraktio joka muuttaa sekvenssin jotain muistuttaa enemmän mitä olemme tottuneet näkemään. Esimerkiksi, jos olemme kanssa 24-bittinen bittikartta, me todennäköisesti tai lukee kolme tavua kerrallaan. Jolloin se olisi järkevää määritellä ja asianmukaisesti nimeä struct, joka on 3 tavua suuri. Vaikka työskentely tiedostoja voi tuntua monimutkaiselta, niitä hyödyntävät antaa meille mahdollisuuden tehdä jotain todella merkittävää. Voimme muuttaa maailman tilasta ulkopuolella ohjelman Voimme luoda jotain, joka elää yli elämää ohjelman tai voimme jopa vaihtaa jotain, joka luotiin ennen meidän käynnistyi käynnissä. Vuorovaikutus tiedostoja on todella voimakas osa ohjelmointia C ja olen innoissani, mitä aiot luoda sen kanssa koodin tulemaan. Nimeni on Jason Hirschhorn. Tämä on CS50. [CS50.TV] [Naurua] Okei. Yksi kestää. Täällä mennään. Kun ajattelemme tiedoston - >> Ai, odota. Anteeksi. [Naurua] Okei. Hei siellä. Kun ajattelemme tiedosto - Kun ajattelet tiedosto - Okei. Kerro minulle, kun olet valmis. Hienoa. Vaikka lukeminen teleprompter voi tuntua - no. My bad.