[Powered by Google Translate] [File I / O] [Jason Hirschhorn, Harvardo universitetas] [Tai CS50, CS50.TV] Kai mes galvojame apie failą, kas ateina į galvą, yra "Microsoft Word" dokumentas, JPEG arba MP3 daina, ir mes bendraujame su kiekviena iš šių tipų failus įvairiais būdais. Pavyzdžiui, "Word" dokumentą, pridėti tekstą o su JPEG vaizdas gali apkarpyti kraštus arba retušuoti spalvas. Tačiau po gaubtu visus failus į savo kompiuterį, yra nieko daugiau, nei nulių ir ilgą seką. Tai su konkrečia programa, kuri sąveikauja su failu nuspręsti, kaip tvarkyti šią ilgą seką ir pateikti ją į vartotojo. Viena vertus, dokumentas gali atrodyti ne tik vienas baitas, arba 8 nuliai ir tie, ir rodyti ASCII simbolių ekrane. Kita vertus, rastrinis vaizdas gali atrodyti po 3 baitų arba 24 nulių ir, ir interpretuoti juos kaip 3 šešioliktainius skaitmenis kurios atstovauja raudonos, žalios ir mėlynos spalvų reikšmes vieno pikselio vaizdą. Ką jie gali atrodyti ekrane, jų esmė, failai yra nieko daugiau, nei nulių ir seka. Taigi, galime pasinerti ir pažvelgti, kaip mes iš tikrųjų manipuliuoti šiais nulių ir kai jis ateina į raštu ir skaitymo iš failo. Aš pradėti reikia suskirstyti į paprastą 3-dalių procesas. Be to, aš pasinerti į dviejų kodų pavyzdžių, kad įrodyti šių trijų dalių. Galiausiai, aš peržiūrėti procesą ir vieni iš svarbiausių informacijos. Kaip ir su bet kokio failo, kad sėdi ant savo darbalaukio, pirmas dalykas, kurį reikia padaryti, tai, kad jį atidarytumėte. In C, mes tai darome skelbiantis žymiklį į iš anksto struct , kuri atstovauja failą diske. Šiuo skambinimo funkcijos, mes taip pat nuspręsti, ar norime rašyti arba skaityti iš failo. Be to, mes faktinį skaitymo ir rašymo. Yra specializuotų funkcijų skaičius, mes galime naudoti šioje dalyje, ir beveik visi iš jų prasideda raide F, kuris stovi failui. Paskutinis, panašus į raudonos X viršutiniame kampe failus atidaryti jūsų kompiuteryje, mes uždarykite failą su galutiniu skambinimo funkcijos. Dabar, mes turime bendrą idėją apie tai, ką mes ketiname daryti, tegul neria į kodą. Šiame kataloge, mes turime dvi C failus ir jų atitinkamas paleidþiamieji failai. Rašomoji mašinėlė programa trunka vieną komandinės eilutės argumentas, dokumento pavadinimas, mes norime sukurti. Šiuo atveju, mes jį vadiname tai doc.txt. Leiskite paleisti programą ir įveskite keletą eilučių. Hi. Mano vardas Jason. Galiausiai, mes įvesti "mesti". Jei mes dabar išvardyti visus failus šiame kataloge, matome, kad naujas dokumentas, vadinamas doc.txt. Kad ši programa tiesiog sukurtas failas. Ir, žinoma, ji taip pat yra nieko daugiau nei nulių ir ilgą seką. Jei mes atidaryti šį naują failą, matome 3 eilutes kodo Mes įrašytas į mūsų programą - Hi. Gegužės vardas Jason. Bet tai, kas iš tikrųjų vyksta, kai typewriter.c veikia? Pirmoje eilutėje palūkanų už mus yra linija 24. Šioje eilutėje, mes pareiškiame savo failo žymeklį. Funkcija, kuri grąžina šį žymeklį, fopen, trunka du argumentus. Pirmasis failo pavadinimas, įskaitant, jeigu reikia, failo plėtinys. Prisiminkite, kad failo plėtinys neturi įtakos ne žemiausio lygio failą. Mes visada susiduriame su nulių ir ilgą seką. Tačiau ji veikia kaip failai yra interpretuojami ir ką aplikacijos yra naudojamos jas atidaryti. Antrasis argumentas fopen vienos raidės , kuris stovi už tai, ką mes planuojame daryti po to, kai mes atidaryti failą. Yra trys galimybės šį argumentą - W, R, A. Mes pasirinkome w šiuo atveju, nes norime įrašyti į failą. R, kaip jums greičiausiai gali atspėti, skaityti failo. Ir pridedant prie bylos. Nors abu, ir gali būti naudojamas rašyti į failus, , pradėti rašyti nuo bylos pradžios ir potencialiai perrašyti visus duomenis, kurie anksčiau buvo saugomi. Pagal nutylėjimą, failo mes atidaryti, jei ji nėra jau egzistuoja, yra sukurta mūsų darbo kataloge. Tačiau, jei norime atidaryti ar sukurti failą į kitą vietą, pirmą argumentą fopen, mes gali nurodyti kelią iki failo, be failo pavadinimo. Nors pirmasis šio proceso dalis yra tik viena eilutė ilgomis, ji visada gera praktika apima kitą linijų rinkinį kad patikrinti, siekiant užtikrinti, kad failas buvo sėkmingai atidarytas, ar sukurta. Jei fopen grąžina NULL, mes nenorime išsiveržti į priekį mūsų programoje, ir tai gali atsitikti taip, jei operacinė sistema yra iš atminties arba, jei mes bandome atidaryti failą į katalogą, kuriam mes neturėjo tinkamas teises. Du šio proceso dalis vyksta rašomųjų mašinėlių while cikle. Mes naudojame CS50 bibliotekos funkcija, gauti informacijos iš vartotojo, ir darant prielaidą, kad jie nenori mesti programą, mes naudojame funkcijos fputs imtis eilutę ir rašyti į failą. fputs yra tik viena iš daugelio funkcijų, mes galime naudoti įrašyti į failą. Kiti įtraukti fwrite, fputc, ir net fprintf. Nepriklausomai nuo to, konkrečiai funkcijai, mes galų gale naudojant, nors, visi jie turi žinoti, per savo argumentus, bent du dalykai - tai, kas turi būti parašyta ir kur tai turi būti parašyta, kad. Mūsų atveju, įvesti, yra seka, kad turi būti parašytas ir fp yra žymeklis, kad nukreipia mus ten, kur mes norime. Šioje programoje, du šio proceso dalis yra gana paprasta. Mes tiesiog eilutę iš vartotojo ir įtraukti jį tiesiogiai mūsų failą su mažai ne input validation ar saugumo patikrinimai. Dažnai, tačiau antroji dalis bus užimti didžiąją dalį savo kodą. Galiausiai, trečioji dalis yra 58 on-line, kur mes uždarykite failą. Čia mes vadiname fclose ir perduoti jį mūsų originalaus failo žymiklį. Vėlesnio eilutėje, mes grįžtame nulis, signalizacijos mūsų programos pabaigą. Ir taip, trečioji dalis yra taip paprasta, kaip kad. Pereikime skaityti iš failų. Atgal į mūsų katalogą, mes turime failą pavadinimu printer.c. Leiskite paleisti jį mes ką tik sukūrėte failą - doc.txt. Ši programa, kaip rodo pavadinimas, tiesiog atspausdinti failo turinys perduota. Ir ten mes turime. Kodo eilutės buvo atspausdintos anksčiau ir išsaugotas doc.txt. Hi. Mano vardas Jason. Jei mes neria į printer.c, matome,, kad daug kodo atrodo panašus į ką mes ką tik vaikščiojo per typewriter.c. Iš tiesų, 22 eilutė, kur mes atidarytas failas, ir linijos 39, kur mes baigė bylą, abu beveik identiškas typewriter.c, išskyrus fopen antrąjį argumentą. Šį kartą, mes skaityti iš failo, todėl mes pasirinkome r vietoj w. Taigi, galime sutelkti dėmesį į antrojo proceso dalis. Atitinka 35, kaip numatyta antroji sąlyga mūsų 4 kilpa, skambinti fgets kompanionas funkcija fputs nuo iki. Šį kartą mes turime tris argumentus. Pirmasis rodyklė į masyvo rašmenimis, jei eilutė bus saugomi. Antra, Maksimalus simbolių skaičius turi būti skaitoma. O trečiasis yra žymiklį į failą, su kuriais mes dirbame. Jūs pastebėsite, kad už linijos baigiasi, kai fgets grąžina NULL. Yra dvi priežastis, kad tai galėjo atsitikti. Pirma, klaida galėjo įvykti. Antra, ir labiau tikėtina, failo pabaigoje pasiekė ir buvo perskaityti ne daugiau simbolių. Tuo atveju, jei jums įdomu, dvi funkcijos egzistuoja, kad leidžia mums pasakyti šios priežasties yra šiuo konkrečiu NULL pointeris priežastis. Ir nenuostabu, nes jie turi daryti su darbo su failais, tiek ferror funkcija ir feof funkcija pradžia raide f. Galiausiai, prieš galime daryti išvadą, vienas greitas pastaba apie failą funkcija pabaigoje, , kuris, kaip ką tik minėjau, yra parašyta, kaip feof. Dažnai jums rasti sau naudojant, o ir kilpų palaipsniui skaityti savo kelią per failus. Taigi, jums reikės būdas baigti šias kilpas, po to, kai jūs pasieksite iš šių failų pabaigą. Kreipiamės į failų rodyklė feof ir patikrinti, norėdami pamatyti, jei tai tiesa, būtų padaryti tik tai. Taigi, while cikle, su sąlyga (! Feof (fp)) gali atrodyti kaip visiškai tinkamą sprendimą. Tačiau, tarkime, mes turime vieną eilutę liko mūsų tekstinį failą. Mes įvesti mūsų while cikle, ir viskas bus taip, kaip planuota. Kitam susitikimui per mūsų programa bus patikrinti, norėdami pamatyti, jei feof fp tiesa, bet - ir tai yra esminis dalykas, suprasti čia - ji negali būti tiesa, tik dar. Tai todėl, kad feof tikslas yra ne patikrinti jei kitas kvietimas skaityti funkcija bus hit failo pabaigoje, , o patikrinti, ar bylos pabaiga jau pasiekė. Šiame pavyzdyje, skaitant paskutinę eilutę mūsų failo eina puikiai sklandžiai, , bet programa dar nežino, kad mes nukentėjo mūsų failo pabaigą. Tai nėra, kol ji vieną papildomą skaityti, kad jis skaitikliai failo pabaigoje. Taigi, teisingas būtų toks: fgets ir jo trys argumentai - produkcija, produkcijos dydis, ir FP - ir visi, kad nėra lygi NULL. Tai mūsų požiūris ėmėsi printer.c, ir šiuo atveju, po kilpa išėjimų, būtų galima pavadinti feof arba ferror informuoti naudotoją į konkrečią argumentais išsivaduoti šio ciklo. Raštu ir skaitymo iš failo, jo Svarbiausio paprastas 3-dalių procesas. Pirma, mes atidaryti failą. Antra, mes įdėti kai kurių dalykų į mūsų bylą arba imtis kai kurių dalykų iš jo. Trečia, turime uždarykite failą. Pirmasis ir paskutinysis dalys yra lengva. Vidurinioji dalis yra keblus dalykų yra. Ir nors po gaubtu mes visada susiduriame su nulių ir ilgą seką, ji padeda kai kodavimo pridėti abstraktųjį , kuris paverčia seką į kažką, kad labiau panaši į tai, ką mes įpratę. Pavyzdžiui, jei mes dirbame su 24-bit bitmap failo, mes greičiausiai bus skaitant arba raštu vienu metu trys baitai. Tokiu atveju, būtų prasminga nustatyti ir tinkamai pavadinti struct, kad yra 3 baitų didelis. Nors darbo su failais gali atrodyti sudėtinga, naudojant juos leidžia mums padaryti kažką tikrai nuostabaus. Mes galime pakeisti padėtį pasaulyje, už mūsų programos, mes galime sukurti kažką, kad gyvena už mūsų programos gyvenimą, ar mes galime ką nors pakeisti, kuris buvo sukurtas prieš mūsų programa paleista. Bendrauja su failais, yra tikrai galinga programavimo dalis C. ir aš džiaugiamės, kad pamatytumėte, ką jūs ketinate sukurti su ja kodą. Mano vardas Jason Hirschhorn. Tai CS50. [CS50.TV] [Juokas] Gerai. Vienu ypu. Čia mes einame. Kai mes galvojame apie failą - >> Oi, palauk. Atsiprašau. [Juokas] Gerai. Hey there. Kai mes galvojame apie failą Jei manote, failą - Gerai. Pasakyk man, kai būsite pasiruošę. O, nuostabu. Nors skaityti iš teleprompter gali atrodyti - ne. Mano blogai.