>> [Music kucheza]
>> ZAMYLA CHAN: Hebu kukabiliana na kupona.
Kuokoa pengine ni pset favorite, na hasa kwa sababu mimi nadhani ni
kweli, kweli baridi.
Kimsingi, wewe ni kupewa kumbukumbu faili kadi ambayo
picha kuwa imefutwa.
Lakini nini ni kwenda kufanya ni kuokoa yao yote.
>> OK.
Hivyo ni kweli kusisimua, lakini labda kidogo vitisho, kwa sababu wewe ni
kutokana na tupu C file na una kujaza in
OK, hivyo hebu kuvunja hii katika sehemu manageable.
Utasikia wanataka kufungua kadi ya kumbukumbu file.
Hiyo inaonekana rahisi kutosha.
Kisha, kupata mwanzo ya JPG picha.
Mafaili yote juu ya kumbukumbu hii kadi ni kwenda kuwa JPGs.
Basi, mara moja kupata mwanzo, wewe kwenda kufungua JPG mpya, kwamba
ni, kama, kujenga JPG, na kuandika 512 byte wakati mpaka mpya JPG ni
kupatikana, na kumalizia mpango huo, mara kuchunguza mwisho wa faili.
>> Hatua hiyo ya kwanza ya kwanza ni kufungua kadi ya kumbukumbu file.
Lakini unajua hii tayari, na kuna file I / O kazi hiyo kwenda
kuthibitisha muhimu sana.
OK.
Kwa hiyo kile ni JPGs?
Kwa sababu tunahitaji mwanzo.
Naam, JPGs, kama ramani kidogo, ni Utaratibu wa tu ya ka.
Kwa bahati nzuri, kila JPG kuanza na ama 0xff, 0xd8, 0xff, 0xe0, mlolongo moja
ya ka, au nyingine mlolongo wa ka.
>> Hivyo wale ka nne zinaonyesha mwanzo wa JPG.
Hakuna wengine zaidi kuliko wale mchanganyiko mbili ya ka nne.
Na kwa bahati yetu, ukweli mwingine kwamba sisi unaweza kuchukua faida ya ni kwamba kila
JPG ni kuhifadhiwa upande kwa upande juu ya kadi ya kumbukumbu.
Nimekuwa kuwakilishwa muundo wa kadi ya kumbukumbu schematically juu ya hili
slide hapa.
Hapa, kila mraba, kila mstatili, inawakilisha 512 ka, na kuanza
rangi ya katika kwamba sisi si kweli kuwa JPG.
>> Lakini basi sisi hatimaye kugonga kuzuia na nyota.
Hiyo ina maana kwamba kwanza ka nne nje ya wale 512 ni moja ya hizo mbili
kuanzia Utaratibu wa JPG.
Na sisi kwenda huko, na kisha mara moja JPG moja kumalizika, moja ijayo huanza.
Sisi si milele yoyote zaidi gray nafasi kati.
>> Lakini jinsi gani sisi kweli kusoma hii, na kusoma ka 512 ili tuweze kufanya
kulinganisha nafasi ya kwanza?
Naam, hebu kwenda nyuma ya fread, ambayo inachukua katika struct ambayo yana
ka kwamba wewe ni kusoma.
Hivyo ni kwenda kuweka wale walio katika hapo -
kawaida, idadi, na kisha inpointer kwamba wewe ni kusoma kutoka.
Sasa, tunataka kusoma 512 kwa wakati mmoja, na tunataka kuhifadhi hii katika buffer,
Mimi nina kwenda simu yake.
>> Kimsingi, tunakwenda kushikilia kwenye wale ka 512 na kufanya
mambo na hayo, right?
Sisi ni kwenda aidha kwa kulinganisha kwanza ka nne, au tunakwenda
kusoma katika, OK?
Hivyo basi data pointer mapenzi kisha kutumika kama buffer yako, na
inpointer, vizuri, kwamba ni kwenda tu kuwa kumbukumbu ya kadi yako.
>> Nyuma kwa kadi ya kumbukumbu yetu schematic.
Sisi ni kwenda kusoma 512 ka wakati huo, kuhifadhi kila block 512-Byte
ndani ya buffer, kufanya kwenye wale buffer, wale ka 512, mpaka tunajua
hasa nini cha kufanya yao.
Hivyo mwanzo ni si kitu, hivyo tutaweza kusoma buffer, kulinganisha, na
sisi haja ya kufanya kitu chochote kwa hayo.
Na kisha, sisi hatimaye kugonga nyota kuzuia, kwa maana kwamba tumekuwa
kupatikana JPG yetu ya kwanza.
Hivyo buffer sasa kushikilia ka na kwamba JPG.
>> wakati mwingine 512 ka, kwa sababu wao ni si kuzuia nyota, pia ni
sehemu ya kwamba JPG.
Na JPGs ni kuendelea kutoka huko katika, mpaka sisi kugonga JPG ijayo.
Na kisha buffer kisha anashikilia 512 ka kwa kuwa JPG, na
kadhalika, na kadhalika.
OK.
>> Hivyo mara moja kugonga kwanza hoja ya kuzuia, JPG kwanza, jinsi gani unaweza
kweli, vizuri, ni wazi?
Hebu kufanya mpya JPG.
filenames kwa JPG ni kwenda kuwa katika format, simu, namba ya,
number.jpg, kwa kuwa wao ni jina lake katika utaratibu ambao wao ni kupatikana,
kuanzia saa 0.
>> Hivyo JPG kwanza kwamba kupata itakuwa 000.jpg.
Kwa hiyo, pengine ni wazo nzuri kuweka wimbo jinsi JPGs wengi Nimepata hadi sasa.
Hivyo kwamba ni jina la faili.
Lakini jinsi gani unaweza kweli kufanya hivyo?
Naam, sisi ni kwenda kutumia kazi kuitwa sprintf.
kidogo sawa na printf, ambapo unaweza kutumia placeholders kwa masharti,
ila katika kesi hii, sprintf magazeti file nje ndani ya sasa ya
directory, si ndani ya wastaafu.
>> OK.
Kwa hiyo hapa tunaona kwamba tuna cheo, char safu kwamba kuhifadhi
kamba matokeo, na sisi kupita katika jina la string halisi na
placeholder, kama vile tumekuwa kujifunza kwa kufanya na printf.
Lakini kanuni hii kwamba mimi hapa nitakupa 2.jpg, si 002.jpg.
Basi, mimi itabidi kuondoka kwa wewe kujua jinsi ya kurekebisha placeholder kufanya
jina sahihi.
>> OK.
Hivyo mara moja umefanya sprintf'd basi unaweza kufungua faili kwamba, kwa sababu ipo katika
saraka yako, na fopen, kwa kutumia cheo, na kisha mode chochote unataka
kufungua faili kwamba in
Hivyo sasa kwamba tumekuwa kufunguliwa mpya JPG file, sasa tunaweza kuandika 512 ka katika
wakati, mpaka JPG mpya kupatikana.
Basi hebu tuangalie tena katika syntax ya fwrite.
>> Najua kwamba nina kuonyesha hii slide a mengi, lakini mimi nataka tu kuhakikisha kwamba
nyie hawapati pia kuchanganyikiwa, kwa sababu Najua kwamba ni rahisi sana kwa
kuchanganya kwanza na mwisho hoja, hasa.
Lakini kumbuka kwamba wewe ni kuandika kutoka buffer yako katika images nje file.
>> Sasa kwa kuwa wewe kujua jinsi ya kuandika 512 ka katika JPG file yako kwamba wameweza
kuundwa, vizuri, tunataka kuacha kuwa mchakato mara moja tumekuwa kufikiwa mwisho wa
kadi yetu, kwa sababu hakutakuwa na picha yoyote zaidi kwa kupatikana.
Basi hebu kwenda nyuma fread mara moja zaidi, mimi ahadi.
fread anarudi vitu wangapi wa kawaida, ukubwa, walikuwa tayari katika mafanikio.
Kusema ukweli, hii ni kwenda kuwa chochote kupita katika kwa idadi, sawa?
Kwa sababu wewe ni kujaribu kusoma idadi ya mambo ya kawaida, ukubwa.
Lakini kama fread ni si uwezo wa kusoma kwamba idadi ya vipengele, basi itabidi kurudi
chochote idadi ni kusoma kwa mafanikio.
>> Sasa, jambo moja muhimu kutambua ni kwamba kama matumizi ya faili mwingine I / O
kazi kama fgetc, kutakuwa na pia kurudi jinsi vitu vingi ni kusoma kwa mafanikio.
Nini muhimu kuhusu kazi hii ni kwamba kama matumizi ya kazi ndani ya
hali, kutakuwa na kutekeleza yenyewe wakati kuamua kwamba hali, ambayo ni
tu muhimu kweli kweli.
Hivyo kama una hali ya hii, kusema, kama fread buffer, sizeof DOG, 2,
pointer, sawa na sawa na 1, kwamba ina maana kwamba Ningependa kusoma
2 mbwa wakati huo.
Lakini kama fread anarudi 1 badala ya 2 kama ilivyotarajiwa, hiyo ina maana kwamba kuna 2
mbwa wa kushoto katika faili yangu, lakini badala ya 1.
Lakini kama kuirudisha 2, basi mimi bado na wale mbwa 2 ndani ya buffer yangu.
>> Hivyo sasa kwamba inatoa hisia ya jinsi ya kuangalia kwa mwisho wa faili, lakini
hebu kwenda kwa njia ya sasa mantiki.
Je, sisi kweli kipande wote ya mambo haya pamoja?
Mara baada ya sisi kugonga JPG wetu wa kwanza, tangu tunajua kwamba JPGs ni kuhifadhiwa
contiguously, tutaweza kuwa na kuandika mpaka sisi kufikia mwisho wa faili kadi.
Lakini hatutaki kuandika kitu mpaka wakati huo.
Hivyo mambo, si tu kwamba tuko katika mwanzoni mwa msimu mpya JPG, lakini kama
tumekuwa tayari kupatikana JPG au la.
>> Kama Ni mwanzoni mwa msimu mpya JPG, tutaweza unataka karibu JPG faili wetu sasa kama
tuna wazi moja, na wazi mwezi mmoja kuandika ndani.
Kama siyo mwanzo wa JPG mpya, ingawa, tutaweza kuweka sawa JPG file
kufungua na kuandika ndani ya hiyo.
Tutaweza kuandika buffer yetu katika namna yoyote JPG file tuna wazi, mradi
tuna wazi moja, bila shaka.
Kama hatuna kupatikana JPG wetu wa kwanza Hata hivyo, sisi wala kuandika kitu chochote.
Na mchakato huu unaendelea mpaka kufikia mwisho wa faili kadi.
>> Na hatimaye, utasikia wanataka kufanya kuhakikisha kwamba fclose yoyote
files kwamba umefanya fopened.
Mara baada ya wewe ni starehe na dhana, tuangalie baadhi ya
pseudocode, ambayo nimekuwa ni pamoja na hapa.
Kwanza, unataka kufungua faili kadi, na kisha kurudia utaratibu zifuatazo
mpaka wameweza kufikiwa mwisho wa kadi.
Unataka kusoma 512 ka ndani ya buffer.
Kwa kutumia buffer, utasikia wanataka kuangalia kama wewe ni mwanzo wa
JPG mpya au la.
Na jibu la swali hilo mapenzi kuathiri usimamizi file yako -
ambayo files kufungua, ambayo ndio je, karibu.
>> Basi, wewe tayari kupatikana JPG?
Gani wamekuwa kutunza wimbo wa hiyo?
Basi, kulingana na kwamba, itabidi ama kuandika katika JPG sasa kwamba
kuwa wazi, au si kuandika wakati wote, kwa sababu una hakuonekana JPG bado.
Hatimaye, mara moja Umefikia mwisho wa file, utasikia wanataka karibu yoyote
files kwamba una wazi iliyobaki.
Tunataka kuwa na tidy hapa.
>> Na kwa kuwa, umefanya zinalipwa yote ya files kukosa na kwamba kumbukumbu
kadi, ambayo ni feat pretty ajabu.
Hivyo pat mwenyewe juu ya nyuma.
Lakini, kuna moja zaidi hiki kwa Pset, ambayo ni kugombea.
Utakuta kwamba wote wa picha kwamba umefanya zinalipwa ni kweli
picha za wafanyakazi CS50 ya.
Hivyo kama wewe ni juu ya chuo au mahali fulani karibu, basi unaweza kuchukua picha na
wafanyakazi, na sehemu ambayo ina picha zaidi kwa wafanyakazi
kutoka mafaili yao zinalipwa mapenzi kupata tuzo ya kutisha.
Pamoja na kwamba, basi kumaliza kuokoa pset.
Jina langu ni Zamyla, na hii ni CS50.