HOPARLÖR: Bu günə qədər ola bilər proqramları ən çox bir az efemer olmuşdur. Siz Mario və ya Greedy kimi bir proqram run. Bu, bəlkə ister, bir şey yoxdur Bəzi məlumatlara üçün istifadəçi, ekran bəzi çıxış çap, lakin sonra proqram üzərində zaman heç bir dəlil həqiqətən var Bu ilk növbədə run edilmişdir. Mən əminəm, siz yazmayıblar bilər, demək Bu, terminal pəncərə açmaq Siz ekran sil əgər var mövcud həqiqətən, heç bir dəlil. Biz saxlanılması vasitəsi yoxdur davamlı informasiya, informasiya ki, sonra mövcud Proqram çalışan dayandırdı, və ya biz bu nöqtəyə qədər yoxdur. Xoşbəxtlikdən, baxmayaraq ki, c yoxdur qabiliyyəti ilə bizi təmin həyata bunu deyilən bir şey bir fayl, bir quruluş ki, əsasən Siz ikiqat ki, bir fayl təmsil Siz değilseniz, bilgisayarınızda basın qrafik istifadəçi mühitində üçün istifadə olunur. Ümumiyyətlə iş zaman c, biz, həqiqətən istəyirik ilə iş olacaq göstəricilərinə fayl fayllar üçün stars-- bir az istisna olmaqla, biz bir neçə haqqında danışmaq zaman funksiyaları ki, fayl göstəricilər ilə işləmək. Siz, həqiqətən, qazılmış var ehtiyac yoxdur anlayışı göstəricilər daxil çox dərin özləri. Bir az ufacık bit var biz onlar haqqında danışmaq olacaq, lakin ümumiyyətlə göstəricilərinə fayl və göstəricilər, qarşılıqlı isə, eyni şey deyil. İndi zaman nə deməkdir Mən davamlı data demək? Israrlı data nədir? Biz bu barədə nə qayğı yoxdur? Ki, məsələn, deyirlər Bir proqram yayınlıyorsanız və ya yenidən etdik bir oyun proqram, və takip etmək istəyirəm istifadəçi hamle bütün belə bir şey yanlış gedir ki, bəlkə, Siz oyun sonra fayl inceleyebilirsiniz. Ki, zaman biz demək nə var Davamlı məlumatlar haqqında danışmaq. Çalışan zamanı sizin Proqram bir fayl yaradılmışdır. Və proqram çalışan dayandırdı, ki, fayl hələ sistem mövcuddur. Və biz baxmaq və yoxlamaq olar. Və belə ki proqram üçün müəyyən olunacaq bəzi israrlı data yaratdıq, data proqram sonra mövcud çalışan başa çatıb. İndi iş bu funksiyaları bütün faylları yaratmaq və manipulyasiya ilə müxtəlif yollarla onları standart io.h yaşayır, olan header fayl ki, çox güman ki, funt oldum Olduqca üst o cümlədən proqramları çox bütün Bu biri var, çünki bizim üçün ən faydalı funksiyaları, də imkan verir printf, standart io.h. yaşayır Belə ki, daxil funt ehtiyac yoxdur heç bir əlavə faylları yəqin ki, məqsədilə fayl göstəricilər ilə işləmək üçün. İndi hər bir fayl pointer funksiyası, və ya hər bir fayl I / O, input output funksiyası biri kimi qəbul onun parametrləri və ya giriş başqa fayl göstərici bir, fopen olan Siz fayl almaq üçün istifadə edir ilk növbədə göstərici. Amma açdı sonra fayl və fayl göstəricilərinə almaq, sonra kimi keçə bilər müxtəlif funksiyaları arqumentlər biz danışmaq olacaq Bu gün, eləcə də bir çox digər ki, faylları ilə işləyə bilər. Belə ki, altı olduqca var ümumi əsas olanları biz bu gün haqqında danışmaq olacaq ki. fopen və onun yoldaşı funksiyası fclose, fgetc və onun yoldaşı funksiyası fputc, və fread və onun yoldaşı funksiyası, fwrite. Belə ki, doğru daxil edək. fopen nə edir? Bəli, bu bir fayl açılır və bu bir fayl göstərici verir, belə ki, o istifadə edə bilərsiniz ki, bir arqument kimi göstərici fayl digər fayl I / O funksiyaları hər hansı bir. Ən mühüm şey fopen ilə yadda Siz açılmışdır ki, sonra fayl və ya burada kimi bir çağırış etdi, Sizi əmin etmək yoxlamaq lazımdır ki, geri almışdır pointer null bərabər deyil. Siz video seyr əgər göstəricilər, bu mənada bilər. Amma siz cəhd və dereference əgər bir null göstərici geri, proqram yəqin ki, dözəcəyik bir seqmentasiya [işitilemez]. Biz əmin etmək istəyirəm ki, biz qanuni göstərici geri almışdır. zaman böyük əksəriyyəti biz geri qanuni göstərici kazanılmış və bir problem olmayacaq. Belə ki, necə biz bir zəng fopen edə bilərəm? Bu kimi olduqca çox görünür. Ümumi olan ptr ptr-- File star göstərici fopen fayl adı və biz iki şeyi bir fayl adı keçir və əməliyyat biz həyata istəyirəm. Beləliklə, biz kimi görünür zəng ola bilər şeylərdir fayl star ptr 1 fopen bərabərdir file1.txt. Mən seçdiyiniz əməliyyat r edir. Beləliklə, nə siz r burada düşünürsünüz? Şeylər hansılardır biz faylları üçün nə edə bilər? Belə ki, r əməliyyat ki, biz biz bir fayl oxumaq üçün istədiyiniz zaman seçin. Belə ki, biz əsasən zaman ki biz bu kimi zəng özümüzü bir fayl göstərici əldə biz sonra məlumat oxumaq bilər ki, belə file1.txt olan. Eynilə, biz fayl 2.txt aça bilər ptr2 yazı üçün və biz keçə bilər, Mən burada yaratdığınız fayl pointer, hər hansı bir funksiyası bir dəlil kimi bir fayl məlumat yazır. Və yazı oxşar var da seçimi, əlavə. arasında fərq yazılı və sınız olan bir fayl yazmaq zaman, Siz yazı üçün fopen zəng əgər ki, fayl artıq bu, mövcud bütün fayl üzerine gedir. Bu başlamaq olacaq çox başında, bütün silmə ki, artıq var. Siz eklenmesi üçün onu açmaq əgər Halbuki, Bu fayl sonunda gedəcək Artıq mətn var, əgər Bu və ya bu məlumat, və sonra başlayacaq oradan yazı. Beləliklə, siz hər hansı bir itirmək olmaz Əvvəl etdiyiniz məlumat. Yazmaq və ya əlavə etmək istəyirəm olsun sort vəziyyəti asılıdır. Amma yəqin ki, nə bilirsiniz vaxtı gələndə sağ əməliyyatdır. Belə ki, fopen var. Nə fclose haqqında? Bəli, olduqca sadəcə, fclose yalnız fayl göstərici qəbul edir. Və gözləyə bilər kimi, Bu fayl bağlayır. Biz bir fayl qapalı sonra, biz bilməz bir daha fayl I / O funksiyaları yerinə oxu və ya fayl, yazı. Biz yenidən açmaq lazımdır üçün başqa vaxt fayl ilə iş davam etmək Bu I / O funksiyaları istifadə edərək. Biz tamamlayın So fclose vasitələri Bu fayl ilə işləyir. Və biz keçmək lazım deyil bir fayl göstərici adı. Bir neçə il əvvəl slaydlar Belə ki, biz oxumaq üçün fopened fayl 1 dot mətn və biz təyin ptr1 göstərici fayl. İndi biz istəyirik karar ki, fayl oxu edilir. Biz onunla bir daha etmək lazım deyil. Biz yalnız fclose ptr1 bilərsiniz. Və eyni, biz bilər digər olanları fclose. Oldu. Belə ki, açılış və bağlanış oldu. Bu iki əsas var əməliyyatları başlayır. İndi biz, həqiqətən istəyirəm bəzi maraqlı stuff edə, və ilk funksiyası ki, biz lazımdır ki fgetc-- ki, bunu görmək Bir xarakter almaq fayl. Ki, ümumiyyətlə fgetc nə tərcümə olardı. Həyat onun məqsədi üçün növbəti xarakter oxumaq, və ya bu sizin çox əgər fgetc ilk zəng xüsusi fayl üçün, ilk character. Amma sonra sonra, Siz növbəti bir almaq fayl çox növbəti xarakteri, Bir xarakter dəyişən və depolar. Biz burada etdik ki, char ch, fgetc bərabərdir bir fayl göstərici adı keçir. Yenə, bu, çox var xatırlamaq Burada əhəmiyyətli üçün var ki, bu əməliyyat uğur, Fayl pointer özü must've oxumaq üçün açılmışdır. Biz faylı bir xarakter oxumaq bilməyən biz yazmaq üçün açılan pointer. Belə ki, biri fopen məhdudiyyətlər, sağ? Biz məhdudlaşdırmaq lazımdır özümüzü yalnız həyata bir fayl göstərici ilə bir əməliyyat. Biz oxumaq istəyirdi və Eyni faylı yazmaq, Biz açıq iki ayrı olardı Eyni fayl fayl göstəricilər oxumaq üçün bir yazı üçün. Belə ki, yenə tək səbəbi Mən indi yetişdirmək biz zəng etmək olacaq, çünki fgetc üçün, fayl pointer must've oxumaq üçün açılmışdır. Və sonra olduqca sadəcə, bütün etməmiz lazımdır Fayl göstərici adına keçir. Belə ki, char ch fgetc ptr1 bərabərdir. Ki, bizə almaq olacaq növbəti xarakter və ya yenidən bu ilk, əgər Biz bu zəng etdik zaman, ilk xarakter nə Fayl ptr1 ilə işarə olunur. Ki, fayl 1 dot mətn idi ki, xatırlayıram. Bu ilk xarakter almaq lazımdır və biz dəyişən ch onu saxlamaq lazımdır. Pretty sadə. Beləliklə, biz yalnız üç baxdı etdik funksiyaları və biz artıq olduqca səliqəli şey edə bilərsiniz. Bu qabiliyyəti əgər Belə ki, bir xarakter əldə və biz loop belə pseudocode biz simvol almaq üçün davam bir fayl üzərində və üzərində və over-- indi biz hər bir oxuya bilərsiniz bir fayl xarakter. Və biz hər xarakter çap əgər biz oxumaq dərhal sonra, biz indi bir fayl oxumaq və ekran onun məzmunu çap. Biz səmərəli Zəncirləmə etdik Ekranda ki, fayl. Və nə Linux command pişik yoxdur. Siz fayl adı pişik növü varsa, bütün içeriğini çap edəcək Sizin terminal pəncərə fayl. Və belə ki, burada bu kiçik loop, kod yalnız üç xətləri, lakin bu səmərəli dublikatları Linux command cat. Belə ki, bu sintaksis bilər bir az qəribə baxmaq lakin burada neler var. Ch fgetc bərabərdir baxmayaraq, ptr deyil bir bütün qurtum EOF-- bərabər, lakin onu yalnız qırmaq edək belə ki, sintaksis aydın deyil. Mən bunu konsolidə edilmiş etdik kosmik naminə, bir az var, baxmayaraq ki, syntactically çətin. Belə ki, yaşıl sağ bu hissəsi indi nə edir? Yaxşı, ki, yalnız bizim fgetc zəng, sağ? Biz əvvəl gördüm. Bu, bir əldə edir fayl character. Sonra biz müqayisə EOF qarşı xarakter. EOF bir xüsusi dəyəri standart io.h, müəyyən edən Fayl xarakterli sonu. Belə ki, əsasən baş neler Bu loop bir xarakter oxumaq olacaq, , EOF müqayisə Fayl xarakterli sonu. Onlar uyğun deyilsə, biz deyil , fayl sona gəlindi ki, xarakter çap lazımdır. Sonra biz geri getmək lazımdır yenidən loop başlayan. Biz bir xarakter almaq lazımdır, yoxlamaq EOF qarşı, belə ki, onu çap və və s və s, yol vasitəsilə loop biz fayl sonunda əldə etdiyiniz qədər. Və o nöqtədə, biz çap olacaq fayl bütün məzmunu həyata. Belə ki, yenə, biz yalnız gördüm fopen, fclose və fgetc və artıq biz dublikat bilər Linux terminal komanda. Əvvəldə dediyim kimi, biz fgetc və fputc idi, və fputc yoldaşı idi fgetc funksiyası. Belə ki, kimi, təsəvvür edə bilər Bu yazı bərabərdir. Bu, bizə bir yazmaq imkan verir bir fayl bir xarakter. Yenə verirlər olan, yalnız Bu fgetc idi kimi, fayl biz must've yazılı etdiyiniz olmuşdur yazılı və ya eklenmesi üçün açdı. Biz cəhd və bir fayl fputc istifadə əgər biz oxumaq üçün açılan etdik ki, biz əziyyət olacaq bir səhv bir az. Amma zəng olduqca sadədir. fputc kapital A ptr2, bütün Bunu olacaq bu deyil məktub yazmaq gedir A fayla 2 nöqtə daxil adı oldu mətn, açdıq və təyin faylı pointer ptr2 üçün. Beləliklə, biz bir yazmaq olacaq kapital A 2 dot mətn faylı. Və biz bir nida yazmaq lazımdır 3 dot fayl qeyd ptr3 ilə işarə etdi mətn. Belə ki, yenə, burada olduqca sadə. Amma indi biz başqa şey edə bilərsiniz. Biz bu nümunə biz artıq gedirdi pişik kopya edə haqqında Linux command, çap bir ekran. Yaxşı, indi biz imkanı var ki, faylları simvol oxumaq üçün və faylları simvol yazmaq niyə biz yalnız əvəz etmir fputc zəng ilə printf zəng. İndi biz cp təqlid etdik, bir çox əsas Linux command biz yol uzun danışdıq ki, bundan Linux video əmr edir. Biz səmərəli var burada ki, təqlid. Biz bir xarakter oxu edirik və sonra biz istəyirik başqa fayl xarakter yazılı. Bir fayl oxu, yazı üzərində başqa, və üzərində yenə biz EOF hit qədər. Biz sonuna var fayl biz surəti çalışırıq. Və biz bütün yazılı olacaq simvol biz fayl lazımdır biz yazılı olduğunuz. Belə ki, bu cp, Linux surəti əmr edir. Çox əvvəlində Bu video, mən verirlər idi bir danışmaq ki, göstəricilər haqqında az. Biz olduğunuz burada xüsusi edir göstəricilər haqqında danışmaq olacaq əlavə göstəricilərinə fayl. Belə ki, bu funksiya cür qorxudan görünür. Bir neçə parametrləri var. Burada gedən bir çox var. Müxtəlif bir çox var rəng və mətnlər. Lakin, həqiqətən, bu, yalnız var fgetc ümumi versiyası ki, bizə hər hansı bir almaq üçün imkan verir məlumat məbləği. Biz əgər bir az səmərəsiz ola bilər bir zamanda simvol bir əldə, fayl vasitəsilə iterating bir-bir xarakter. Bu almaq üçün gözəl olmazdı Bir anda bir dəfə və ya 500 100? Yaxşı, fread və onun yoldaşı funksiyası fwrite, biz hansı haqqında danışmaq lazımdır ikinci, bizə yalnız bunu imkan verir. Biz ixtiyari məbləği oxuya bilərsiniz bir fayl məlumat və biz bir yerdə müvəqqəti olaraq saxlamaq. Bunun əvəzinə, yalnız qadir olan bir dəyişən onu uyğun, biz bir sıra saxlamaq lazımdır. Və belə ki, biz dörd keçmək arqumentlər bir göstərici fread üçün biz istəyirik yeri məlumat saxlamaq üçün gedir, necə hər bir məlumat vahid böyük olacaq, informasiya neçə ədəd biz əldə etmək istəyən, və fayl biz onları almaq istəyirəm. Yəqin ki, ən yaxşı təsvir Burada nümunə ilə. Belə ki, biz bəyan ki, bildirin 10 integers bir sıra. Biz yalnız bəyan etdik özbaşına yığın Varış 10 int. Belə ki, olduqca sadə var. İndi biz nə olsa edirik edir frecall biz int ölçüsü oxuyursunuz ki, dəfə məlumat 10 bytes. Int olan Size ki four-- c bir tam ölçüsü. Belə ki, nə biz edirik, biz oxuyursunuz deyil Məlumat dəyərində 40 bytes fayl Ptr ilə işarə etdi. Və biz o saxlanılması edirik 40 bytes haradasa biz kənara olduğu Yaddaş dəyərində 40 bytes. Sevindirici haldır ki, biz artıq ki etdik ki array orada, Varış elan. Ki keçirilməsi qadirdir 10 dörd byte kontur. Cəmi Belə ki, 40 aça bilər bytes məlumat dəyər. Və biz indi 40 bytes oxu fayl informasiya, və biz Varış onu saxlanılması edirik. Göstəricilərinə video Xatırladaq ki, Belə Varış kimi bir sıra, adı, həqiqətən, yalnız bir göstəricisidir ilk element. Belə ki, biz orada Varış keçmək zaman, biz bir göstərici keçən, əslində, var. Eynilə Biz bu edə bilərsiniz biz mütləq deyil yığını bufer saxlamaq lazımdır. Biz də dinamik ayıra bilər bir malloc istifadə edərək, bu kimi bufer. Zaman, saxla dinamik yaddaş ayrılması, biz onu qənaət edirik yığın deyil yığını. Amma hələ bir tampon var. Bu hələ, bu halda, edir məlumat 640 bayt keçirilməsi ikiqat səkkiz bayt tutur, çünki. Və biz onlardan 80 üçün xahiş edirik. Biz yer istəyirəm 80 ikiqat keçiriləcək. Belə ki, 80 dəfə 8 640 bytes məlumat. Və fread ki, zəng məlumat 640 bayt toplanması fayl ilə işarə olan ptr və arr2 indi saxlanılması. İndi biz də fread müalicə edə bilər yalnız fgetc zəng kimi. Bu halda, biz yalnız çalışdığınız faylı bir xarakter almaq. Və biz bir ehtiyac yoxdur array bir xarakter keçirmək. Biz yalnız onu saxlaya bilərsiniz Bir xarakter dəyişən. tutmaq, baxmayaraq ki, biz yalnız bir dəyişən zaman, biz keçmək lazımdır ki, dəyişən ünvanı Xatırladaq ki, çünki fread ilk arqument yeri və yaddaş bir göstəricisidir biz məlumat saxlamaq istədiyiniz. Yenə bir adı array bir göstəricisidir. Belə ki, biz işareti array etmək lazım deyil. Amma c, karakter c Burada bir sıra deyil. Bu yalnız bir dəyişən var. Və belə ki, biz bir keçmək lazımdır işareti c göstərir ki, biz istəyirik ünvan olduğunu məlumat bu bir byte saxlamaq üçün, bu bir xarakter ki, biz Ptr olan toplanması edirik. Mən keçmək lazımdır Fwrite-- Bu bir az daha tez, olduqca çox fread dəqiq ekvivalent Bu yazı üçün var istisna olmaqla, əvəzinə oxu, yalnız other-- kimi açıq etdik və yaxın bir xarakter almaq, bir xarakter yazın. İndi ixtiyari almaq var məlumat məbləği, məlumat sağ ixtiyari məbləği. Belə ki, yalnız əvvəl kimi, biz 10 integers bir sıra var biz artıq məlumat bəlkə saxlanılır. Bu yəqin ki, kodu bəzi xətləri idi bu iki arasında getməlidir Mən Varış doldurmaq harada mənalı bir şey. Mən 10 müxtəlif integers ilə doldurun. Əvəzinə, mən nə edirəm bunu Varış yazı edilir və Varış məlumat toplanması. Mən məlumat alaraq alıram və fayl onu qoyulması. Belə ki, əvəzinə onu olan bufer fayl, biz artıq olacaq fayl bufer. Belə ki, yalnız əks edir. Əvvəl kimi Belə ki, yenə, biz də yaddaş bir yığın yığın var biz dinamik etdik ki, ayrılmış və oxumaq və fayl ki, yazmaq. Və biz də bir dəyişən var bir byte keçirilməsi qadir Belə bir xarakter kimi məlumatların. Ancaq yenə də, biz keçmək lazımdır ki, dəyişən ünvanı biz oxutdu istədiyiniz zaman. Belə ki, biz məlumat yaza bilərsiniz ki, ünvanda tapmaq Fayl göstərici, ptr. Digər çox var böyük fayl I / O funksiyaları Bundan başqa, müxtəlif şeylər olanları biz bu gün haqqında söhbət etdik. Isə bir neçə Faydalı ola bilər fgets və fputs var, olan ekvivalent fgetc və fputc lakin oxumaq üçün bir fayl bir string. Bunun əvəzinə bir xarakter, Bu bütün string oxumaq olacaq. əsasən imkan verir fprintf, fayl yazmaq üçün printf istifadə etmək. Siz nə edə bilərsiniz, belə ki, kimi istifadə edərək dəyişən əvəz placeholders faiz i və printf ilə yüzdə d, və s, Siz eyni bilər printf string və çap bir şey bir fayl kimi. fseek-- bir DVD player varsa Mən adətən burada istifadə analogiya edir növ istifadə kimi sizin geri və sürətli irəli düymələri film ətrafında hərəkət etmək. Eynilə, siz fayl ətrafında hərəkət edə bilər. Daxili şeylərdən biri ki, fayl strukturu Siz bir göstəricidir ki, c yaradır harada fayl var. Siz çox var byte sıfır başlayan? Siz byte 100 var, byte 1000, və s? Siz özbaşına hərəkət fseek istifadə edə bilərsiniz irəli və ya geri ki, göstərici. Və yenə, ftell bir DVD player bənzər, deyir ki, bir az saat kimi Siz neçə dəqiqə və saniyə siz xüsusi film var. Eynilə, ftell necə deyir çox bytes fayl daxil. feof fərqli bir versiyası Siz var olub aşkar fayl sona gəlindi. Və ferror bir funksiyası var istifadə edə bilərsiniz ki, bir şey olub olmadığını aşkar etmək üçün bir fayl ilə yanlış iş getdi. Yenə də, bu yalnız səthi kazıma. Çox daha çox fayl I / O hələ var standart io.h. funksiyaları Amma bu, yəqin ki, siz əldə edəcək Fayl göstəricilər ilə iş başladı. Mən Doug Lloyd edirəm. Bu CS50 edir.