>> 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.