>> SPIKA: Hadi sasa, ni uwezekano kwamba wengi wa mipango yako
kuwa kidogo ephemeral.
Kukimbia mpango kama Mario au tamaa.
Ni haina kitu, ni labda papo user kwa baadhi ya habari,
magazeti baadhi pato kwa screen, lakini kisha wakati mpango wako juu,
kuna kweli hakuna ushahidi pale ilikuwa milele kukimbia katika nafasi ya kwanza.
I mean, hakika, unaweza kuwa na kushoto ni wazi katika dirisha terminal,
lakini kama wewe wazi screen yako, kuna kweli hakuna ushahidi kwamba kuwepo.
Hatuna njia ya kuhifadhi Maelezo ya kuendelea, habari
kwamba ipo baada wetu Mpango huo kusimamishwa mbio,
au tuna si hadi hatua hii.
Kwa bahati nzuri ingawa, c gani kutupatia uwezo
kufanya hivyo kwa kutekeleza kitu kinachoitwa
file, muundo kwamba kimsingi inawakilisha faili kwamba itakuwa mara mbili
click kwenye kompyuta yako, kama wewe ni kutumika graphical mazingira mtumiaji.
Kwa ujumla wakati wa kufanya kazi na c, sisi ni kweli
kwenda kufanya kazi kwa kuyatumia kwa files-- faili stars--
isipokuwa kwa kidogo wakati sisi majadiliano juu ya wanandoa
ya kazi ambayo kazi na kuyatumia file.
Huna haja ya kuwa na kweli kuchimbwa pia kina ndani ya kuyatumia uelewa
wenyewe.
Kuna kidogo kidogo teeny ambapo sisi majadiliano juu yao,
lakini kwa ujumla faili kuyatumia na kuyatumia, wakati yanayohusiana,
si hasa kitu kimoja.
>> Sasa je, mimi maana wakati Nasema data kuendelea?
Ni nini data kuendelea?
Kwa nini sisi huduma kuhusu hilo?
Kusema, kwa mfano, kwamba wewe ni mbio mpango
au umefanya kuandikwa upya Mpango hiyo ni mchezo,
na unataka kuweka wimbo ya yote ya hatua ya mtumiaji
ili labda kama kitu fulani kitaenda vibaya, unaweza mapitio faili baada ya mchezo.
Hiyo ni nini maana sisi wakati sisi majadiliano juu ya data kuendelea.
>> Katika mwendo wa mbio yako mpango, faili ni kuundwa.
Na wakati mpango wako kimesimama kukimbia,
faili kwamba bado lipo kwenye mfumo wako.
Na tunaweza kuangalia ni na kuchunguza yake.
Na hivyo mpango huo itakuwa kuweka tumemuumba baadhi ya data ya kudumu,
data kuwepo baada ya mpango ina kumaliza mbio.
>> Sasa wote wa kazi hizo kuwa kazi na kujenga files na kufanyia
nao kwa njia mbalimbali wanaishi katika kiwango io.h,
ambayo ni header faili kwamba umefanya uwezekano kuwa pauni
ikiwa ni pamoja na juu ya pretty mengi yote ya programu yako
kwa sababu ina moja ya kazi zaidi na manufaa kwa ajili yetu,
printf, ambayo pia inakuwezesha anaishi katika kiwango io.h.
Hivyo huna haja ya chupa pamoja na mafaili yoyote ya ziada pengine
ili kufanya kazi na kuyatumia file.
>> Sasa kila mmoja faili pointer kazi, au kila faili moja I / O, pembejeo pato
kazi, anapokea kama moja ya vigezo wake au pembejeo
faili pointer isipokuwa kwa moja, fopen, ambayo
ni nini kutumia ili kupata faili pointer katika nafasi ya kwanza.
Lakini baada ya umefanya kufunguliwa faili na kupata kuyatumia faili,
unaweza kisha kupita yao kama hoja kwa kazi mbalimbali
sisi ni kwenda kuzungumza kuhusu leo, pamoja na wengine wengi
ili uweze kufanya kazi na mafaili.
>> Hivyo kuna sita pretty kawaida ndio msingi
kwamba sisi ni kwenda kuzungumza kuhusu leo.
fopen na rafiki yake kazi fclose, fgetc
na rafiki utendaji wake wa kazi fputc, na fread na rafiki yake kazi,
fwrite.
Basi hebu kupata haki ndani yake.
>> fopen-- ni nini nini?
Naam, ni kufungua faili na anatoa faili pointer hiyo,
ili uweze kisha kutumia kwamba faili pointer kama hoja
kwa yoyote ya faili wengine I / O kazi.
Jambo muhimu zaidi kukumbuka kwa fopen
ni kwamba baada ya kufunguliwa faili au alitoa wito kama moja hapa,
unahitaji kuangalia kuhakikisha kwamba pointer kwamba got nyuma
si sawa kwa null.
Kama si watched video juu ya kuyatumia, hii inaweza kufanya akili.
Lakini kama wewe kujaribu dereference na pointer null wanakumbuka,
Mpango wako pengine kuteswa segmentation [inaudible].
Tunataka kuhakikisha kwamba sisi got halali pointer nyuma.
Idadi kubwa ya muda sisi waliopata pointer halali nyuma
na haitakuwa tatizo.
>> Hivyo ni jinsi gani sisi kufanya wito kwa fopen?
Inaonekana pretty kiasi kama hii.
Faili nyota ptr-- ptr kuwa kurefusha maisha jina kwa ajili ya faili pointer fopen
na sisi kupita katika mambo mawili, jina la faili na uendeshaji tunataka kufanya.
Hivyo tuwe na wito kwamba inaonekana kama Haya faili nyota PTR 1 ni sawa na fopen
file1.txt.
Na uendeshaji nimekuwa waliochaguliwa ni r.
>> Hivyo unafikiri nini r ni hapa?
Je, ni aina ya mambo sisi kuwa na uwezo wa kufanya ili mafaili?
Hivyo r ni operesheni kwamba sisi kuchagua wakati tunataka kusoma faili.
Hivyo tunataka kimsingi wakati sisi kufanya wito kama huu
kuwa kupata wenyewe faili pointer kiasi kwamba tunaweza kisha kusoma taarifa
kutoka file1.txt.
>> Vile vile, tunaweza kufungua faili 2.txt kwa maandishi na ili tuweze kupita ptr2,
faili pointer nimekuwa kuundwa hapa, kama hoja kwa kazi yoyote ambayo
anaandika habari kwa file.
Na sawa na kuandika, kuna pia ni chaguo append,.
Tofauti kati kuandika na appending
kuwa kwamba wakati wewe kuandika na faili, kama wewe kufanya wito kwa fopen kwa kuandika
na faili kwamba tayari ipo, ni kwenda overwrite faili nzima.
Ni kwenda kuanza mwanzoni kabisa,
kufuta taarifa zote hiyo ni tayari pale.
>> Lakini ikiwa kuufungua kwa appending, itakuwa kwenda hadi mwisho wa faili
kama kuna tayari asilia katika au maelezo ndani yake,
na itakuwa kisha kuanza kuandika kutoka huko.
Hivyo si kupoteza yoyote ya Maelezo umefanya kosa kabla.
Kama unataka kuandika au append aina ya inategemea hali hiyo.
Lakini pengine utasikia kujua nini operesheni haki ni wakati unakuja.
Hivyo hiyo ni fopen.
>> Je kuhusu fclose?
Naam, pretty tu, fclose tu anapokea faili pointer.
Na kama unaweza kutarajia, ni kufunga faili hilo.
Na mara moja tumekuwa imefungwa file, hatuwezi kufanya faili tena I / O kazi,
kusoma au kuandika, juu ya faili hilo.
Tuna upya kufungua faili wakati mwingine ili
kuendelea kufanya kazi na hivyo kwa kutumia I / O kazi.
Njia Hivyo fclose sisi ni kosa kufanya kazi na faili hii.
Na wote tunahitaji kupitisha katika ni jina la faili pointer.
Kadhalika wanandoa slides iliyopita, sisi fopened faili 1 nukta maandishi kwa ajili ya kusoma
na sisi kupewa kwamba faili pointer ptr1.
Sasa tumekuwa aliamua tuko amefanya kusoma kutoka faili hilo.
Hatuna haja ya kufanya lolote zaidi na hayo.
Tunaweza tu fclose ptr1.
Na vile vile, hakuweza sisi fclose wale wengine.
Sawa.
Hivyo hiyo ni kufungua na kufunga.
Hayo ni msingi miwili kuanzia shughuli.
>> Sasa tunataka kweli kufanya baadhi ya mambo ya kuvutia,
na kazi ya kwanza kwamba tutaweza kuona kwamba kufanya hivyo ni fgetc--
faili kupata tabia.
Hiyo ni nini fgetc ujumla ingekuwa kutafsiri kwa.
Lengo lake katika maisha ni kusoma tabia ijayo,
au kama hii ni yako sana wito wa kwanza fgetc
kwa ajili ya faili fulani, tabia ya kwanza.
Lakini basi baada ya hapo, kupata moja ijayo,
tabia iliyofuata ya faili kwamba, na maduka katika kutofautiana tabia.
Kama tumefanya hapa, char ch sawa na fgetc,
kupita kwa jina la faili pointer.
Tena, ni sana muhimu hapa kukumbuka
kwamba ili kuwa na operesheni hii kufanikiwa,
faili pointer yenyewe must've imefunguliwa kwa ajili ya kusoma.
Hatuwezi kusoma tabia kutoka faili pointer kwamba sisi kufunguliwa kwa maandishi.
Hivyo hiyo ni moja ya mapungufu ya fopen, sawa?
Tuna kuzuia wenyewe kwa kufanya tu
operesheni moja kwa moja faili pointer.
Kama sisi alitaka kusoma na kuandika kutoka faili moja,
tunataka kuwa wazi viwili tofauti kuyatumia faili file-- sawa
moja kwa ajili ya kusoma, moja kwa maandishi.
>> Hivyo tena, sababu tu Mimi kuleta kuwa hadi sasa ni
kwa sababu kama sisi ni kwenda kupiga simu kwa fgetc, kwamba faili pointer must've
imefunguliwa kwa ajili ya kusoma.
Na kisha pretty tu, zote tunahitaji kufanya
ni kupita kwa jina la faili pointer.
Hivyo Char ch sawa na fgetc ptr1.
>> Hiyo inaenda kupata sisi character-- ijayo
au tena, kama hii ni mara ya kwanza wakati tumekuwa alifanya wito huu,
character-- kwanza wa chochote faili zimeelekezwa kwa na ptr1.
Kumbuka kwamba hiyo ilikuwa ya faili 1 nukta asilia.
Ni itabidi kupata tabia ya kwanza ya kwamba na tutaweza kuhifadhi katika ch kutofautiana.
Pretty moja kwa moja.
Hivyo tumekuwa tu inaonekana katika tatu kazi na tayari sisi
wanaweza kufanya kitu pretty nadhifu.
>> Hivyo kama sisi kuchukua uwezo huu ya kupata tabia
na sisi kitanzi it-- hivyo sisi kuendelea kupata wahusika
kutoka faili tena na tena na over-- sasa sisi
Unaweza kusoma kila moja tabia ya faili.
Na kama sisi magazeti kila tabia mara baada ya sisi kusoma,
sisi sasa kusoma kutoka faili na kuchapishwa yaliyomo yake kwa screen.
Tumekuwa ufanisi concatenated kwamba faili kwenye screen.
Na kwamba ni nini Linux amri paka gani.
>> Kama aina paka katika jina la faili, ni magazeti nje yaliyomo yote
ya faili katika terminal dirisha yako.
Na hivyo hii kitanzi kidogo hapa, mistari mitatu tu ya maadili,
lakini kwa ufanisi marudio Linux amri paka.
Hivyo syntax hii huenda kuangalia kidogo weird,
lakini hapa ni nini kinatokea hapa.
Wakati ch sawa na fgetc, PTR si sawa na EOF-- ni Mouthful nzima,
lakini hebu kuvunja chini tu hivyo ni wazi juu ya syntax.
Nimekuwa kuimarishwa ni kwa ajili ya nafasi,
ingawa ni kidogo syntactically gumu.
>> Hivyo sehemu hii katika kijani haki sasa, nini ni kufanya?
Naam, hiyo ni fgetc yetu wito, sawa?
Tumeona kwamba kabla.
Ni kupata moja tabia kutoka faili.
Kisha sisi kulinganisha kwamba tabia dhidi EOF.
EOF ni thamani maalum kwamba inavyoelezwa katika kiwango io.h, ambayo
Huu ndio mwisho wa faili tabia.
Hivyo kimsingi nini kitatokea ni kitanzi hii itakuwa kusoma tabia,
kulinganisha kwa EOF, mwisho wa faili tabia.
Kama hawana mechi, hivyo tuna si kufikiwa mwisho wa file,
tutaweza magazeti kwamba tabia nje.
Kisha tutaweza kurudi mwanzo wa kitanzi tena.
Tutaweza kupata tabia, kuangalia dhidi EOF, magazeti ya nje, na kadhalika
na kadhalika na kadhalika, looping kupitia kwa njia ambayo
mpaka tumekuwa kufikiwa mwisho wa faili.
Na kisha kwa hatua hiyo, tutakuwa na kuchapishwa
nje yaliyomo yote ya faili.
Hivyo tena, tumekuwa tu kuonekana fopen, fclose, na fgetc
na tayari tunaweza kurudia Linux wastaafu amri.
>> Kama nilivyosema mwanzoni, tulikuwa na fgetc na fputc,
na fputc alikuwa rafiki kazi ya fgetc.
Na hivyo, kama unaweza kufikiria, ni kuandika sawa.
Ni inaruhusu sisi kuandika tabia moja na faili.
>> Tena, caveat kuwa, tu kama ilivyokuwa kwa fgetc, faili
kwamba sisi ni kuandika kwa must've wamekuwa kufunguliwa kwa maandishi au kwa appending.
Kama sisi kujaribu na kutumia fputc kwenye faili la kwamba tumekuwa kufunguliwa kwa ajili ya kusoma,
tunakwenda kuteseka kidogo ya makosa.
Lakini wito ni pretty rahisi.
mji mkuu fputc ptr2, kila hiyo ni kwenda kufanya ni ni
kwenda kuandika barua ndani ya kwenye faili 2 nukta
maandishi, ambayo ilikuwa jina ya faili kwamba sisi kufunguliwa na kupewa
pointer ptr2.
Hivyo sisi ni kwenda kuandika A mji mkuu na faili 2 nukta asilia.
Na tutaweza kuandika mshangao uhakika na faili 3 nukta
maandishi, ambayo ilikuwa alisema kwa ptr3.
Hivyo tena, pretty moja kwa moja hapa.
>> Lakini sasa tunaweza kufanya kitu kingine.
Tuna mfano huu tulikuwa tu kwenda juu
juu ya kuwa na uwezo wa kuiga paka Linux amri, moja kwamba Prints nje
screen.
Naam, sasa kwamba tuna uwezo kusoma wahusika kutoka mafaili
na kuandika herufi ya mafaili, kwa nini sio sisi tu mbadala kwamba
wito kwa printf kwa mwito wa fputc.
>> Na sasa tumekuwa kurudiwa cp, msingi sana Linux amri
kwamba kuongelea njia ya muda mrefu iliyopita katika Linux amri video.
Tumekuwa ufanisi duplicated kwamba haki hapa.
Sisi ni kusoma tabia na kisha tuko kuandika kwamba tabia ya faili jingine.
Kusoma kutoka faili moja, kuandika hadi nyingine, tena na tena
na tena mpaka sisi kugonga EOF.
Sisi tumepewa mwishoni mwa faili sisi ni kujaribu nakala kutoka.
Na kwa kuwa tutaweza wameandika zote ya wahusika tunahitaji faili
kwamba sisi ni kuandika kwa.
Hivyo hii ni cp, Linux na nakala ya amri.
>> Mwanzoni kabisa mwa video hii, nilikuwa na caveat
kwamba tunataka kuzungumza kidogo kuhusu kuyatumia.
Hapa ni hasa ambapo tuko kwenda kuzungumza kuhusu kuyatumia
pamoja na faili kuyatumia.
Hivyo kazi hii inaonekana aina ya inatisha.
Ni got vigezo kadhaa.
Kuna mengi kinachoendelea hapa.
Kuna mengi ya tofauti rangi na maandiko.
Lakini kwa kweli, ni tu toleo la kurefusha maisha ya fgetc
ambayo inaruhusu sisi kupata yoyote Kiasi cha habari.
Ni inaweza kuwa kidogo ufanisi kama sisi ni kupata wahusika mmoja kwa wakati,
iterating kupitia faili tabia moja kwa wakati mmoja.
Je, si ni kuwa nicer kupata 100 kwa wakati mmoja au 500 kwa wakati mmoja?
>> Naam, fread na rafiki yake kazi fwrite, ambayo tutaweza majadiliano juu ya
katika pili, kuruhusu sisi kufanya tu.
Tunaweza kusoma kiasi holela cha habari kutoka faili
na sisi kuhifadhi mahali fulani kwa muda.
Badala ya kuwa na uwezo wa tu fit katika kutofautiana moja,
tupate haja ya kuhifadhi katika safu.
Na hivyo, sisi kupita katika nne hoja kwa fread-- pointer
kwa eneo ambapo tuko kwenda kuhifadhi habari,
jinsi kubwa kila kitengo cha habari itakuwa, vitengo ngapi wa habari
tunataka kupata, na kutoka ambayo faili tunataka kupata yao.
Pengine ni bora mfano kwa mfano hapa.
Basi hebu kusema kwamba sisi kutangaza safu ya 10 integers.
Tumekuwa tu alitangaza juu ya stack kiholela int arr 10.
Hivyo hiyo ni pretty moja kwa moja.
Sasa nini sisi ni kufanya ingawa ni frecall ni sisi ni kusoma ukubwa wa int
mara 10 ka wa habari.
Ukubwa wa int kuwa four-- hiyo ni ukubwa wa integer katika c.
>> Hivyo nini sisi ni kufanya ni sisi ni kusoma 40 ka thamani ya habari
kutoka faili alisema kwa PTR.
Na sisi ni hifadhi wale 40 ka mahali fulani
ambapo tumetenga 40 ka thamani ya kumbukumbu.
Kwa bahati nzuri, tumekuwa tayari amefanya hivyo kwa kutangaza arr, kwamba safu haki pale.
Kuwa ni uwezo wa kufanya 10 manne-Byte vipande.
Hivyo kwa jumla, inaweza kuendesha 40 ka thamani ya habari.
Na sisi sasa ni kusoma ka 40 cha habari kutoka faili,
na sisi ni hifadhi hiyo katika arr.
>> Kumbuka kutoka video kwenye kuyatumia kwamba jina la safu, kama vile arr,
ni kweli tu pointer kwa kipengele yake ya kwanza.
Hivyo wakati sisi kupita katika arr huko, sisi ni, kwa kweli, kupita katika pointer.
>> Vile vile tunaweza kufanya Haya sisi si lazima
haja ya kuokoa buffer yetu juu ya stack.
Tunaweza pia dynamically kutenga a buffer kama hii, kwa kutumia malloc.
Kumbuka, wakati sisi dynamically kutenga kumbukumbu,
sisi ni kuokoa juu ya chungu, si stack.
Lakini bado ni buffer.
>> Bado, katika kesi hii, ni kuikopesha 640 ka wa habari
kwa sababu mara mbili inachukua hadi ka nane.
Na sisi ni kuuliza kwa 80 miongoni mwao.
Tunataka kuwa na nafasi kushikilia 80 mara mbili.
Hivyo mara 80 8 ni 640 ka habari.
Na kwamba wito kwa fread ni kukusanya 640 ka wa habari
kutoka faili alisema kwa ptr na hifadhi hiyo sasa katika arr2.
>> Sasa tunaweza pia kutibu fread kama wito kwa fgetc.
Katika kesi hiyo, sisi ni kujaribu tu kupata tabia moja kutoka faili.
Na hatuna haja safu kushikilia tabia.
Tunaweza tu kuhifadhi katika tabia kutofautiana.
>> Kukamata, ingawa, ni kwamba wakati sisi tu kutofautiana,
tunahitaji kupitisha katika pepe ya kwamba kutofautiana
kwa sababu wanakumbuka kwamba kwanza hoja kwa fread
ni pointer eneo na kumbukumbu ambapo tunataka kuhifadhi habari.
Tena, jina la safu ni pointer.
Hivyo hatuna haja ya kufanya ampersand safu.
Lakini c, tabia c hapa, ni si safu.
Ni tu kutofautiana.
Na hivyo tunahitaji kupitisha ampersand c kuonyesha
kwamba hiyo ni anwani ambapo tunataka kuhifadhi Byte hii moja wa habari,
tabia hii moja kwamba sisi ni kukusanya kutoka PTR.
Fwrite-- nitakwenda kupitia hii kidogo zaidi
quickly-- ni kiasi pretty halisi sawa na fread
isipokuwa ni kwa ajili ya kuandika badala ya kusoma, tu
kama other-- tulikuwa na wazi na karibu, kupata tabia,
kuandika tabia.
Sasa ni kupata holela Kiasi cha habari,
haki holela kiasi cha habari.
Hivyo tu kama kabla, tunaweza safu ya integers 10
ambapo tayari tuna habari kuhifadhiwa, labda.
>> Ilikuwa pengine baadhi mstari wa kanuni kuwa anatakiwa kwenda kati ya hizi mbili
ambapo mimi kujaza ARR na kitu ya maana.
Mimi kujaza kwa 10 integers tofauti.
Na badala yake, ni nini mimi nina kufanya ni kuandika kutoka arr
na kukusanya taarifa kutoka arr.
Na mimi nina kuchukua habari ambazo na kuweka katika faili.
>> Hivyo badala ya kuwa kutokana na faili buffer,
tuko sasa kwenda kutoka buffer na faili.
Hivyo ni tu kinyume.
Hivyo tena, tu kama kabla, tunaweza pia kuwa lundo chunk ya kumbukumbu
kwamba tumekuwa dynamically zilizotengwa na kusoma kutoka kuwa
na kuandika kuwa na faili.
>> Na sisi pia kuwa kutofautiana moja uwezo wa kufanya byte moja
ya habari, kama vile tabia.
Lakini tena, tunahitaji kupitisha katika pepe ya kwamba kutofautiana
wakati tunataka kusoma kutoka humo.
Ili tuweze kuandika maelezo tunaona katika anwani hiyo
na faili pointer, ptr.
>> Kuna kura ya wengine faili kubwa I / O kazi
kwamba kufanya mambo mbalimbali badala ndio tumekuwa aliyesema kuhusu leo.
Michache ya watoto unaweza kupata manufaa
ni fgets na fputs, ambayo ni sawa
ya fgetc na fputc lakini kwa kusoma kamba moja kutoka faili.
Badala ya tabia moja, itakuwa kusoma kamba nzima.
fprintf, ambayo kimsingi inaruhusu kutumia printf kuandika na faili.
Hivyo tu kama unaweza kufanya kutofautiana badala ya kutumia
asilimia placeholders i na asilimia d, na kadhalika, na printf
unaweza vile vile kuchukua printf kamba na magazeti kitu
kama kwamba kwa file.
>> fseek-- kama una DVD player ni mfano mimi matumizi ya kawaida here--
ni aina ya kama kwa kutumia yako rewind na ya haraka mbele
vifungo kuweza kuzunguka sinema.
Vile vile, unaweza kuzunguka faili.
Moja ya mambo ndani ya kwamba muundo faili
kuwa c inajenga kwa ajili yenu ni kiashiria ya ambapo wewe ni katika faili.
Ni wewe saa sana mwanzo, katika Byte sifuri?
Ni wewe saa Byte 100, Byte 1000, na kadhalika?
Unaweza kutumia fseek kiholela kusonga kuwa kiashiria mbele au nyuma.
>> Na ftell, tena sawa na mchezaji DVD,
Ni kama saa kidogo kwamba anaelezea jinsi dakika na sekunde wewe wengi
ni katika sinema fulani.
Vile vile, ftell anaelezea jinsi wengi ka wewe ni katika faili.
feof ni toleo la tofauti ya kuchunguza kama wameweza
kufikiwa mwisho wa faili.
Na ferror ni kazi kwamba unaweza kutumia
kuchunguza kama kitu ina gone kazi kibaya na faili.
Tena, hii ni scratching ya uso.
Bado kuna mengi zaidi ya faili I / O kazi katika io.h. kiwango
Lakini hii pengine kupata wewe kuanza kufanya kazi na kuyatumia file.
Mimi nina Doug Lloyd.
Hii ni cs50.