[Powered by Google Translate] [Ranpli I / O] [Jason Hirschhorn, Inivèsite Harvard] [Sa a se CS50, CS50.TV] Lè nou panse de yon dosye, ki sa ki vini nan lespri se yon dokiman Pawòl Microsoft, yon JPEG imaj, oswa yon chante MP3, e nou kominike avèk chak nan sa yo kalite dosye nan fason diferan. Pou egzanp, nan yon dokiman Pawòl nou ajoute tèks pandan y ap avèk yon imaj JPEG nou ta ka rekòt soti bor yo oswa rtouch koulè yo. Men, anba kapo machin lan tout dosye yo nan òdinatè nou yo se pa gen anyen plis pase yon sekans long nan zewo ak inite. Li a jiska aplikasyon an espesifik ki reyaji ak dosye a dwe deside kijan pou travay sou sa a sekans long epi prezante l bay itilizatè a. Sou yon sèl men, yon dokiman kapab gade nan jis multiple youn, oswa 8 zewo ak moun yo, epi montre yon karaktè ASCII sou ekran an. Nan lòt men an, yon imaj bitmap kapab gade nan 3 bytes, oswa 24 zewo ak moun yo, ak esplike nou rèv yo kòm 3 nimewo ekzadesimal ki reprezante valè yo pou wouj, vèt, ak ble nan yon sèl pixel nan yon imaj. Kèlkeswa sa yo ka sanble sou ekran ou a, nan nwayo yo, dosye yo pa gen anyen pi plis pase yon sekans nan zewo ak inite. Se konsa, nan kite l 'plonje nan ak gade ki jan nou aktyèlman manipile sa yo zewo ak moun yo lè li rive ekri nan ak lekti ki sòti nan yon dosye. Mwen pral kòmanse pa kraze li desann nan yon pwosesis senp 3-pati. Next, mwen pral plonje nan de egzanp kòd ki demontre pati sa yo twa. Finalman, mwen pral revize pwosesis la ak kèk nan detay ki pi enpòtan li yo. Kòm avèk nenpòt dosye ki chita sou Desktop ou, premye bagay la fè se louvri li. Nan C nou fè sa a pa deklare yon konsèy nan yon struct predefini ki reprezante yon dosye sou ki gen kapasite. Nan sa a rele fonksyon, nou menm tou nou deside si nou vle yo pou yo ekri oswa li nan dosye a. Next, nou fè lekti aktyèl la ak ekri. Genyen yon kantite nan fonksyon espesyalize nou kapab itilize nan pati sa a, ak preske yo tout kòmanse ak F la lèt, ki vle di pou dosye-a. Sot pase yo, analogue nan X yo ti kras wouj nan kwen an tèt de dosye yo louvri sou òdinatè ou, nou fèmen dosye a ak yon apèl nan fonksyon final la. Kounye a ke nou gen yon ide jeneral de sa n ap pral fè a, kite a plonje nan kòd la. Nan anyè sa a, nou gen de dosye C ak dosye ki koresponn ègzèkutabl yo. Pwogram nan typewriter pran youn agiman liy lòd, non an nan dokiman an nou vle kreye. Nan ka sa a, nou pral rele li doc.txt. Se pou nou kouri pwogram nan epi antre nan yon koup nan liy yo. Hi. Non mwen se Jason. Finalman, nou pral tape "kite." Si nou kounye a gen lis tout dosye yo nan anyè sa a, nou wè ki egziste yon nouvo dokiman yo rele doc.txt. Sa a se dosye a pwogram sa a jis te kreye. Ak nan kou, li tou se pa gen anyen plis pase yon sekans long nan zewo ak inite. Si nou louvri sa a ranpli nouvo, nou wè liy ki 3 nan kòd nou te antre nan gwo pwogram nou an - Hi. Me non se Jason. Men, sa ki aktyèlman pral sou lè typewriter.c kouri? Liy nan premye nan enterè pou nou se liy 24. Nan liy sa a, nou deklare konsèy dosye nou yo. Fonksyon an ki retounen sa a konsèy, fopen, li pran de prèv. Premye a se non an dosye ki gen ladan ekstansyon an dosye si sa apwopriye. Sonje byen, yon ekstansyon dosye pa enfliyanse dosye a nan pi ba nivo li yo. Nou toujou ap fè fas ak yon sekans long nan zewo ak inite. Men, li fè sa enfliyans ki jan dosye yo entèprete yo ak aplikasyon pou sa ki yo te itilize yo louvri yo. Agiman Dezyèm fwa w fopen se yon lèt yon sèl ki vle di pou ki sa nou planifye fè apre nou fin louvri dosye a. Gen twa opsyon pou sa a agiman - W, R, ak A. Nou te chwazi w nan ka sa a paske nou vle yo pou yo ekri dosye a. R, kòm ou ka pwobableman devine, se pou lekti nan dosye a. Ak yon se pou ajou nan dosye a. Pandan ke tou de w ak yon kapab itilize pou ekri nan dosye, w ap kòmanse ekri depi nan konmansman an nan dosye a ak genyen potansyèl pou recouvrir nenpòt done sa yo ki te deja ki estoke. Pa default, dosye a nou louvri, si li pa deja egziste, se ki te kreye nan anyè prezan nou an ap travay. Sepandan, si nou vle gen aksè a oubyen kreye yon dosye nan yon kote diferan, nan agiman an premye nan fopen, nou ka presize yon chemen dosye nan adisyon a non an dosye-a. Pandan ke premye pati nan pwosesis sa a se sèlman yon liy nan kòd long, li toujou bon pratik gen ladan yon lòt seri liy ki tcheke asire ke dosye a te avèk siksè louvri oswa kreye. Si fopen retounen nil, nou pa ta vle fòje devan ak pwogram nou an, ak sa a ka rive si sistèm nan fonksyone se soti nan memwa oswa si nou eseye louvri yon dosye nan yon anyè pou ki nou pa t 'gen otorizasyon apwopriye yo. Pati de nan pwosesis la pwan plas nan riban pandan y ap typewriter a. Nou itilize yon fonksyon bibliyotèk CS50 jwenn enfòmasyon nan men gwoup itilizatè a yo, epi ki pran idantite yo pa vle kite pwogram nan, nou itilize fputs yo fonksyon yo pran fisèl la epi ekri li nan dosye a. fputs se sèlman youn nan fonksyon sa yo anpil nou te ka sèvi ak yo pou yo ekri dosye a. Gen lòt ki gen ladan yo fwrite, fputc, e menm fprintf. Kèlkeswa fonksyon an patikilye nou fini lè l sèvi avèk, menm si, tout nan yo bezwen konnen, via agiman yo, omwen de bagay - sa ki bezwen yo dwe ekri e ki kote li bezwen yo dwe ekri nan. Nan ka nou an, D 'se fisèl la ki bezwen yo dwe ekri ak Fp se konsèy la ki dirije nou kote n ap ekri. Nan pwogram sa a, pati de nan pwosesis la se pito senp. Nou ap tou senpleman pran yon kòd nan itilizatè a epi ajoute li dirèkteman nan dosye nou yo avèk ti kras-a-pa gen okenn validation opinyon oswa chèk sekirite. Souvan, sepandan, pati de pral pran èstime nan kòd ou a. Finalman, yon pati twa se sou liy 58, kote nou fèmen dosye a. Isit la nou rele fkloz epi pase li konsèy orijinal dosye nou yo. Nan liy lan ki vin apre a, nou tounen zewo, siyal nan fen pwogram nou an. Epi, se wi, pati twa se kòm senp tankou sa. Se pou yo deplase sou li nan dosye. Retounen nan lis nou an, nou gen yon dosye rele printer.c. Se pou nou kouri l 'ak dosye a nou jis te kreye - doc.txt. Pwogram sa a, kòm non an sijere, yo pral tou senpleman enprime soti sa ki nan dosye a te pase li. Se la nou genyen li. Liy sa yo nan Kòd nou te tape pi bonè ak sove nan doc.txt. Hi. Non mwen se Jason. Si nou plonje nan printer.c, nou wè ke yon anpil nan kòd la sanble menm jan ak sa nou jis te mache nan tout nan typewriter.c. Vreman vre, yo liy 22 kote nou louvri dosye a, ak 39 liy, kote nou fèmen dosye a, tou de se prèske ki idantik ak typewriter.c, sove pou agiman fopen dezyèm fwa. Fwa sa a, nou ap li ki sòti nan yon dosye li an, pou nou te chwazi r olye pou yo w. Kidonk, kite a konsantre sou dezyèm pati a nan pwosesis la. Nan liy 35, kòm kondisyon an dezyèm nan 4 riban nou an, nou fè yon apèl fje, konpayon fonksyon nan fputs soti nan anvan. Fwa sa a, nou gen twa agiman. Premye a se konsèy nan etalaj la nan karaktè ki kote yo pral fisèl la dwe estoke. Dezyèm la se la pou maksimòm kantite karaktè ou dwe li. Ak twazyèm lan se konsèy nan dosye a ak ki nou ap travay. Ou ap remake ke pou riban fini an lè fje retounen nil. Gen de rezon ki fè sa a ka te rive. Premyèman, ka yon erè te fèt. Dezyèmman, ak plis chans, yo te nan fen dosye a rive jwenn e pa gen plis karaktè yo te li a. Nan ka w ap mande, de fonksyon egziste ki pèmèt nou di ki rezon ki fè se kòz la pou sa a konsèy nil an patikilye. Epi, pa surprenante, depi yo gen fè ak travay ak dosye, tou de fonksyon an ferror ak nan kòmansman an fonksyon feof ak f nan lèt yo. Finalman, anvan nou fini, yon sèl rapid nòt sou fen a nan fonksyon ranpli, ki, kòm jis mansyone, ki ekri nan Liv kòm feof. Souvan w ap jwenn tèt ou lè l sèvi avèk tan, e pou pasan progresivman li fason ou nan dosye. Kidonk, ou pral bezwen yon fason nan fen sa yo pasan apre ou fin rive nan fen an nan fichye sa yo. Rele feof sou konsèy dosye ou epi tcheke yo wè si se vre ta jis fè sa. Kidonk, yon riban pandan y ap avèk kondisyon an (! Feof (Fp)) ta ka sanble tankou yon solisyon parfe ki apwopriye yo. Sepandan, di nou gen yon sèl liy kite nan dosye tèks nou an. Nou pral antre nan riban pandan y ap nou yo ak tout bagay ap travay deyò tankou te planifye a. Sou nan pwochen tou nan, pwogram nou an pral tcheke pou wè yo wè si feof nan Fp se vre, men - ak sa a se pwen an enpòtan yo konprann isit la - li pa pral vre jis ankò. Sa a se paske bi pou yo feof se pa yo tcheke si apèl la pwochen nan yon fonksyon li pral frape nan fen dosye a, men pito yo tcheke si ou pa te fen a nan dosye a yo te deja rive jwenn. Nan ka sa a egzanp, lekti liy ki sot pase a nan dosye nou an ale parfe san pwoblèm, men pwogram nan pa wè jan nou te frape nan fen dosye nou yo. Li pa jouk li fè sa yon sèl Read adisyonèl ke li kontè fen a nan dosye a. Kidonk, yon kondisyon ki kòrèk ta dwe bagay sa yo: fje ak agiman twa li yo - randman, gwosè nan pwodiksyon, ak Fp - ak nan tout sa egal pa nil. Sa a se apwòch la nou te pran nan printer.c, ak nan ka sa a, apre yo fin sòti nan riban, ou ta ka rele feof oswa ferror enfòme itilizatè a kòm rezònman an espesifik pou sòti sa a riban. Ekri pou ale ak pou lekti ki sòti nan yon dosye se, nan ki pi fondamantal li yo, yon senp 3-pati pwosesis la. Premyèman, nou louvri dosye a. Dezyèmman, nou mete kèk bagay nan dosye nou an oswa pran kèk bagay soti nan li. Twazyèmman, nou fèmen dosye a. Pati pyès sa yo premye ak dènye yo fasil. Pati nan mitan an se kote bagay la difisil manti. Epi menm si anba kapo a nou toujou ap fè fas ak yon sekans long nan zewo ak moun yo, li ede lè kodaj yo ajoute yon kouch abstraction ki vin sekans lan nan yon bagay ki sanble pi plis ak sa n ap itilize yo wè. Pou egzanp, si nou ap travay ak yon dosye bitmap 24-ti jan, nou pral posib pou li, oswa ekri twa bytes nan yon tan. Nan ka sa a, li ta fè sans nan defini ak kòmsadwa non yon struct ki se 3 bytes gwo. Menm si travay ak dosye ki ka sanble yo konplike, itilize yo pèmèt nou fè yon bagay vrèman remakab. Nou ka chanje eta a nan mond lan deyò pwogram nou an, nou kapab kreye yon bagay ki ap viv pi lwen pase lavi sa a ki nan pwogram nou an, oubyen nou ka menm chanje yon bagay ki te kreye anvan pwogram nou an te kòmanse kouri. Kominikasyon avèk dosye se yon pati vrèman pwisan nan pwogram nan C. ak mwen eksite yo wè sa ki w ap ale nan kreye ak li nan kòd la ap vini yo. Non mwen se Jason Hirschhorn. Sa a se CS50. [CS50.TV] [Rir] Oke. Youn nan pran. Isit la nou ale. Lè nou panse de yon dosye - >> Oh, rete tann. Sorry. [Rir] Okay. Hey la. Lè nou panse de yon dosye - Lè ou panse a yon dosye - Okay. Di m 'lè w ap pare. Oh, gwo. Menm si li soti nan yon teleprompter ki ka sanble yo - pa gen okenn. Move m 'yo.