[Powered by Google Translate] [File I / O] [Jason Hirschhorn, Università ta 'Harvard] [Dan huwa CS50, CS50.TV] Meta naħsbu ta 'fajl, dak li tiġi f'moħħna huwa dokument Microsoft Word, immaġni JPEG, jew kanzunetta MP3, u aħna jinteraġixxu ma 'kull wieħed minn dawn it-tipi ta' fajls b'modi differenti. Per eżempju, f'dokument Word aħna żid it-test filwaqt li bi xbieha JPEG nistgħu uċuħ tar-raba l-truf jew retouch-kuluri. Madankollu taħt il-barnuża kollha tal-fajls fil-kompjuter tagħna huma xejn aktar minn sekwenza twila ta 'żero u dawk. Huwa f'idejn l-applikazzjoni speċifika li jinteraġixxi mal-fajl biex jiddeċiedu kif il-proċess din is-sekwenza twila u tippreżentah lill-utent. Fuq naħa waħda, dokument tista 'tħares lejn wieħed biss byte, jew 8 żero u dawk, u juru l-karattru ASCII fuq l-iskrin. Min-naħa l-oħra, immaġni Bitmap tista 'tħares lejn 3 bytes, jew 24 żero u dawk, u jinterpreta bħala 3 numri hexadecimal li jirrappreżentaw il-valuri għal aħmar, aħdar u blu f'wieħed pixel ta 'immaġni. Kull ma jistgħu look like fuq l-iskrin tiegħek, fil-qalba tagħhom, fajls huma xejn aktar minn sekwenza ta 'żero u dawk. Mela ejja adsa u ħarsa lejn kif għandna attwalment jimmanipulaw dawn żero u dawk meta niġu għall-kitba lejn u qari mill-fajl. I ser tibda billi jitkissru l-isfel fis-sempliċi 3-parti proċess. Sussegwentement, jien ser adsa fis eżempji kodiċi 2 li juru dawn il-partijiet 3. Fl-aħħarnett, I ser tirrevedi l-proċess u xi wħud mill-dettalji l-aktar importanti tagħha. Bħal kull fajl li tpoġġi fuq id-desktop tiegħek, l-ewwel ħaġa li għandek tagħmel hu li tiftħu. Fl C nagħmlu dan billi tiddikjara pointer għal Struct predefinit li jirrappreżenta fajl fuq diska. F'dan is-sejħa funzjoni, aħna wkoll jiddeċiedi jekk irridu li tikteb jew taqra mill-fajl. Sussegwentement, aħna nagħmlu l-qari attwali u l-kitba. Hemm numru ta 'funzjonijiet speċjalizzati nistgħu nużaw f'din il-parti, u kważi kollha kemm huma jibdew bl-ittra F, li stands għall-fajl. Last, simili għall-X aħmar ftit fil-kantuniera ta 'fuq tal-fajls miftuħa fuq il-kompjuter tiegħek, aħna qrib il-fajl ma 'sejħa funzjoni finali. Issa li għandna idea ġenerali ta 'dak li aħna qed tmur biex tagħmel, ejja adsa fis-kodiċi. F'dan id-direttorju, għandna żewġ fajls C u fajls eżekutibbli tagħhom korrispondenti. Il-programm typewriter tieħu waħda argument linja tal-kmand, l-isem tad-dokument irridu noħolqu. F'dan il-każ, aħna ser sejħa hija doc.txt. Ejja run-programm u tidħol koppja ta 'linji. Hi. Jisimni Jason. Fl-aħħarnett, aħna ser tip "nieqaf." Jekk aħna issa lista kollha tal-fajls f'dan id-direttorju, naraw li dokument ġdid teżisti imsejħa doc.txt. Dik hija l-fajl f'dan il-programm biss maħluqa. U ovvjament, huwa wisq huwa xejn aktar minn sekwenza twila ta 'żero u dawk. Jekk aħna miftuħa dan il-fajl ġdid, naraw l-linji 3 tal-kodiċi aħna daħlu fis-programm tagħna - Hi. Isem Mejju huwa Jason. Imma x'inhu attwalment għaddejjin meta runs typewriter.c? L-ewwel linja ta 'interess għalina hija linja 24. F'dan il-linja, aħna niddikjaraw pointer fajl tagħna. Il-funzjoni li prospetti dan il-werrej, fopen, jieħu żewġ argumenti. L-ewwel huwa l-isem ta 'fajl inkluża l-estensjoni tal-fajl jekk ikun xieraq. Ifakkar li l-estensjoni fajl ma jinfluwenzax il-fajl fuq il-livell baxx tagħha. Aħna dejjem jittrattaw ma 'sekwenza twila ta' żero u dawk. Iżda dan ma influwenza kif fajls huma interpretati u applikazzjonijiet dak huma użati biex tiftaħ lilhom. It-tieni argument li fopen huwa ittra waħdanija li stands għal dak li aħna nippjanaw li nagħmlu wara we tiftaħ il-fajl. Hemm tliet għażliet għal dan l-argument - W, R, u A. Imxejna magħżul w f'dan il-każ għaliex irridu li jikteb lill-fajl. R, kif inti tista 'probabbilment raden, huwa għall-qari għall-fajl. U huwa għall jpoġġu għall-fajl. Filwaqt li kemm w u jista 'jintuża għall-kitba għall-fajls, w se tibda tikteb mill-bidu tal-fajl u potenzjalment jissostitwixxu kwalunkwe data li qabel kienu maħżuna. Konvenzjonalment, l-fajl aħna miftuħa, jekk ma jkunux diġà jeżistu, huwa maħluq fl-direttorju tax-xogħol tagħna preżenti. Madankollu, jekk irridu li jkollhom aċċess jew toħloq fajl f'post differenti, fl-ewwel argument ta 'fopen, aħna jistgħu jispeċifika mogħdija fajl minbarra l-isem ta 'fajl. Filwaqt li l-ewwel parti ta 'dan il-proċess huwa biss linja waħda tal-kodiċi twil, huwa dejjem prattika tajba li jinkludu sett ieħor ta 'linji li jivverifikaw biex jiżguraw li l-fajl kien b'suċċess miftuħa jew maħluqa. Jekk fopen prospetti nulli, aħna ma tkunx tixtieq li nimxu 'l quddiem mal-programm tagħna, u dan jista 'jiġri jekk is-sistema operattiva huwa barra ta' memorja jew jekk aħna tipprova tiftaħ fajl fil-direttorju li aħna ma jkollhom l-permessi xierqa. It-tieni parti tal-proċess iseħħ loop filwaqt typewriter s. Aħna nużaw funzjoni librerija CS50 biex tikseb input mill-utent, u jekk wieħed jassumi li ma jridux li nieqaf-programm, aħna nużaw l-fputs funzjoni li jieħdu l-sekwenza u jiktbu għall-fajl. fputs hija biss waħda mill-bosta funzjonijiet nistgħu jużaw biex jikteb lill-fajl. Oħrajn jinkludu fwrite, fputc, u anki fprintf. Irrispettivament mill-funzjoni partikolari aħna jispiċċaw jużaw, għalkemm, kollha kemm huma jeħtieġu li jkunu jafu, permezz argumenti tagħhom, mill-inqas żewġ affarijiet - dak li jeħtieġ li tkun miktuba u fejn jeħtieġ li jiġu miktuba sabiex. Fil-każ tagħna, input huwa l-sekwenza li jeħtieġ li tkun miktuba u fp huwa l-pointer li jidderiġi ahna fejn aħna qed miktub. F'dan il-programm, parti tnejn ta 'l-proċess huwa pjuttost sempliċi. Aħna qed sempliċement jieħdu string mill-utent u żżidu direttament għall-fajl tagħna bi ftit għall-ebda input validazzjoni jew kontrolli ta 'sigurtà. Spiss, madankollu, parti tnejn se jieħdu l-biċċa l-kbira tal-kodiċi tiegħek. Fl-aħħarnett, parti 3 huwa fuq il-linja 58, fejn aħna tagħlaq il-fajl. Here we call fclose u tgħaddih pointer tagħna inkartament oriġinali. Fil-linja sussegwenti, nerġgħu lura żero, sinjalar l-aħħar tal-programm tagħna. U, iva, parti 3 huwa sempliċi bħal dik. Ejja jimxu fuq qari mill-fajls. Lura fl-direttorju tagħna għandna fajl imsejjaħ printer.c. Ejja run mal-fajl aħna biss maħluqa - doc.txt. Dan il-programm, kif tissuġġerixxi l-isem, sempliċiment se jistampa l-kontenut tal-fajl mgħoddi lilha. U hemm aħna għandna hija. Il-linji ta 'kodiċi kellna ittajpjat qabel u salvati fil doc.txt. Hi. Jisimni Jason. Jekk aħna adsa fis printer.c, naraw li ħafna tal-kodiċi jistenna simili għal dak li aħna biss mixi permezz ta 'fil typewriter.c. Tabilħaqq linja 22, fejn aħna miftuħa l-fajl, u l-linja 39, fejn aħna għalqet il-fajl, huma t-tnejn kważi identiċi għal typewriter.c, ħlief għal argument fopen 2. Din id-darba aħna qed qari mill-fajl, hekk aħna għażlu r minflok w. Għalhekk, ejja tiffoka fuq it-tieni parti tal-proċess. F'konformità 35, bħala l-kondizzjoni tieni 4 loop tagħna, nagħmlu sejħa biex fgets, il-funzjoni anëillari li fputs minn qabel. Din id-darba għandna tliet argumenti. L-ewwel hija l-pointer għall-firxa ta 'karattri, fejn l-sekwenza tkun maħżuna. It-tieni huwa n-numru massimu ta 'karattri li jinqraw. U l-tielet huwa l-pointer għall-fajl li aħna qed jaħdmu. Int ser ikollok avviż li l-linja ta tispiċċa meta fgets prospetti nulli. Hemm żewġ raġuni li dan seta 'ġara. L-ewwel, żball seta 'seħħ. It-tieni, u aktar probabbli, it-tmiem tal-fajl intlaħaq u f'karattri mhux aktar kienu jinqraw. Fil-każ li int mintix, żewġ funzjonijiet jeżistu li jippermettu magħna biex tgħid liema raġuni hija l-kawża ta 'dan il-werrej null partikolari. U, mhux sorpriża, peress li dawn għandhom x'jaqsmu ma 'ħidma ma' fajls, kemm il-funzjoni ferror u l-bidu funzjoni feof mal-f ittra. Fl-aħħarnett, qabel aħna nikkonkludu, wieħed Nota malajr dwar it-tmiem ta 'funzjoni fajl, li, kif għadu kif issemma, huwa miktub kif feof. Spiss inti ser issib ruħek bl-użu waqt u għal linji biex progressivament taqra tiegħek mod permezz ta 'fajls. Għalhekk, ikollok bzonn mod biex tintemm dawn loops wara li inti jilħqu t-tmiem ta 'dawn il-fajls. Isejħu feof fuq pointer fajl tiegħek u verifika biex tara jekk huwa veru se tagħmel dan. Għalhekk, filwaqt li loop mal-kundizzjoni (! Feof (FP)) jista 'jidher bħala soluzzjoni perfettament adatta. Madankollu, ngħidu aħna għandna linja waħda jitħalla fil-fajl test tagħna. Aħna ser jidħol loop filwaqt tagħna u kollox se taħdem kif ippjanat. Fuq il-fażi li jmiss permezz ta ', programm tagħna se tikkontrolla biex tara jekk feof ta fp huwa veru, iżda - u dan huwa l-punt kruċjali li wieħed jifhem hawn - mhux se jkun veru għadha biss. Dak għax l-iskop ta 'feof mhuwiex li tivverifika jekk is-sejħa li jmiss għal funzjoni taqra se tolqot it-tmiem tal-fajl, iżda pjuttost biex tivverifika jekk jew le l-aħħar tal-fajl diġà ntlaħaq. Fil-każ ta 'dan l-eżempju, qari tal-aħħar linja tal-fajl tagħna tmur perfettament tajjeb, iżda l-programm ma tafx li konna hit-aħħar tal-fajl tagħna. Mhuwiex sakemm ma wieħed jaqra addizzjonali li hija counters t-tmiem tal-fajl. Għalhekk, kundizzjoni korretta tkun li ġej: fgets u tliet argumenti tagħha - produzzjoni, id-daqs ta 'produzzjoni, u FP - u kollha ta 'dak li ma ugwali għal null. Dan huwa l-approċċ ħadna fil printer.c, u f'dan il-każ, wara l-ħruġ loop, inti tista 'sejħa feof jew ferror li jinforma lill-utent dwar il-motivazzjoni speċifika għall-ħruġ f'dan loop. Kitba għal u qari mill-fajl huwa, l-aktar bażiċi tagħha, sempliċi 3-parti proċess. L-ewwel, aħna tiftaħ il-fajl. It-tieni, npoġġux xi affarijiet fil-fajl tagħna jew tieħu xi affarijiet minnha. It-tielet, aħna qrib il-fajl. L-ewwel u l-aħħar huma faċli. Il-parti tan-nofs huwa fejn l-għalf delikata tinsab. U għalkemm taħt il-barnuża aħna qed dejjem jittrattaw ma 'sekwenza twila ta' żero u dawk, ma tgħin meta kodifika biex iżżid saff ta 'estrazzjoni li jixgħel l-sekwenza fis xi ħaġa li jixbaħ iżjed dak li aħna qed jintużaw biex jaraw. Per eżempju, jekk aħna qed jaħdmu ma 'fajl Bitmap 24-bit, aħna ser x'aktarx tkun qari jew bil-miktub tlett bytes kull darba. F'liema każ, ikun jagħmel sens li jiġu definiti u xieraq l-isem a Struct li huwa ta '3 bytes kbir. Għalkemm ħidma ma 'fajls jista' jidher ikkumplikat, użu minnhom jippermetti li tagħmel xi ħaġa verament eċċezzjonali. Aħna jistgħu jbiddlu l-istat tal-dinja ta 'barra programm tagħna, nistgħu noħolqu xi ħaġa li jgħix lil hinn mill-ħajja tal-programm tagħna, jew nistgħu saħansitra l-bidla xi ħaġa li kienet maħluqa qabel programm tagħna bdiet taħdem. Interazzjoni ma 'fajls hija parti tassew qawwija ta' programmazzjoni C. u jien eċċitati biex tara dak li int ser toħloq magħha fil-kodiċi li ġejjin. Jisimni Jason Hirschhorn. Dan huwa CS50. [CS50.TV] [Daħk] Okay. Wieħed jieħu. Here we go. Meta naħsbu ta 'fajl - >> Oh, stenna. Jiddispjacini. [Daħk] Okay. Ħej hemm. Meta naħsbu ta 'fajl - Meta taħseb ta 'fajl - Okay. Tell me meta int lest. Oh, kbir. Għalkemm qari mill-teleprompter jista 'jidher - l-ebda. Bad tiegħi.