1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [File I / O] 2 00:00:02,000 --> 00:00:04,000 [Jason Hirschhorn, Università ta 'Harvard] 3 00:00:04,000 --> 00:00:07,000 [Dan huwa CS50, CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Meta naħsbu ta 'fajl, dak li tiġi f'moħħna huwa dokument Microsoft Word, 5 00:00:11,000 --> 00:00:14,000 immaġni JPEG, jew kanzunetta MP3, 6 00:00:14,000 --> 00:00:17,000 u aħna jinteraġixxu ma 'kull wieħed minn dawn it-tipi ta' fajls b'modi differenti. 7 00:00:17,000 --> 00:00:20,000 Per eżempju, f'dokument Word aħna żid it-test 8 00:00:20,000 --> 00:00:24,000 filwaqt li bi xbieha JPEG nistgħu uċuħ tar-raba l-truf jew retouch-kuluri. 9 00:00:24,000 --> 00:00:28,000 Madankollu taħt il-barnuża kollha tal-fajls fil-kompjuter tagħna huma xejn aktar 10 00:00:28,000 --> 00:00:31,000 minn sekwenza twila ta 'żero u dawk. 11 00:00:31,000 --> 00:00:33,000 Huwa f'idejn l-applikazzjoni speċifika li jinteraġixxi mal-fajl 12 00:00:33,000 --> 00:00:38,000 biex jiddeċiedu kif il-proċess din is-sekwenza twila u tippreżentah lill-utent. 13 00:00:38,000 --> 00:00:41,000 Fuq naħa waħda, dokument tista 'tħares lejn wieħed biss byte, 14 00:00:41,000 --> 00:00:45,000 jew 8 żero u dawk, u juru l-karattru ASCII fuq l-iskrin. 15 00:00:45,000 --> 00:00:48,000 Min-naħa l-oħra, immaġni Bitmap tista 'tħares lejn 3 bytes, 16 00:00:48,000 --> 00:00:50,000 jew 24 żero u dawk, 17 00:00:50,000 --> 00:00:53,000 u jinterpreta bħala 3 numri hexadecimal 18 00:00:53,000 --> 00:00:56,000 li jirrappreżentaw il-valuri għal aħmar, aħdar u blu 19 00:00:56,000 --> 00:00:58,000 f'wieħed pixel ta 'immaġni. 20 00:00:58,000 --> 00:01:01,000 Kull ma jistgħu look like fuq l-iskrin tiegħek, fil-qalba tagħhom, 21 00:01:01,000 --> 00:01:05,000 fajls huma xejn aktar minn sekwenza ta 'żero u dawk. 22 00:01:05,000 --> 00:01:08,000 Mela ejja adsa u ħarsa lejn kif għandna attwalment jimmanipulaw dawn żero u dawk 23 00:01:08,000 --> 00:01:12,000 meta niġu għall-kitba lejn u qari mill-fajl. 24 00:01:12,000 --> 00:01:15,000 >> I ser tibda billi jitkissru l-isfel fis-sempliċi 3-parti proċess. 25 00:01:15,000 --> 00:01:19,000 Sussegwentement, jien ser adsa fis eżempji kodiċi 2 li juru dawn il-partijiet 3. 26 00:01:19,000 --> 00:01:23,000 Fl-aħħarnett, I ser tirrevedi l-proċess u xi wħud mill-dettalji l-aktar importanti tagħha. 27 00:01:23,000 --> 00:01:25,000 Bħal kull fajl li tpoġġi fuq id-desktop tiegħek, 28 00:01:25,000 --> 00:01:28,000 l-ewwel ħaġa li għandek tagħmel hu li tiftħu. 29 00:01:28,000 --> 00:01:31,000 Fl C nagħmlu dan billi tiddikjara pointer għal Struct predefinit 30 00:01:31,000 --> 00:01:33,000 li jirrappreżenta fajl fuq diska. 31 00:01:33,000 --> 00:01:38,460 F'dan is-sejħa funzjoni, aħna wkoll jiddeċiedi jekk irridu li tikteb jew taqra mill-fajl. 32 00:01:38,460 --> 00:01:41,660 Sussegwentement, aħna nagħmlu l-qari attwali u l-kitba. 33 00:01:41,660 --> 00:01:44,800 Hemm numru ta 'funzjonijiet speċjalizzati nistgħu nużaw f'din il-parti, 34 00:01:44,800 --> 00:01:48,790 u kważi kollha kemm huma jibdew bl-ittra F, li stands għall-fajl. 35 00:01:48,790 --> 00:01:53,560 Last, simili għall-X aħmar ftit fil-kantuniera ta 'fuq tal-fajls miftuħa fuq il-kompjuter tiegħek, 36 00:01:53,560 --> 00:01:56,680 aħna qrib il-fajl ma 'sejħa funzjoni finali. 37 00:01:56,680 --> 00:01:59,540 Issa li għandna idea ġenerali ta 'dak li aħna qed tmur biex tagħmel, 38 00:01:59,540 --> 00:02:02,000 ejja adsa fis-kodiċi. 39 00:02:02,000 --> 00:02:06,100 >> F'dan id-direttorju, għandna żewġ fajls C u fajls eżekutibbli tagħhom korrispondenti. 40 00:02:06,100 --> 00:02:09,710 Il-programm typewriter tieħu waħda argument linja tal-kmand, 41 00:02:09,710 --> 00:02:12,060 l-isem tad-dokument irridu noħolqu. 42 00:02:12,060 --> 00:02:16,160 F'dan il-każ, aħna ser sejħa hija doc.txt. 43 00:02:16,160 --> 00:02:19,080 Ejja run-programm u tidħol koppja ta 'linji. 44 00:02:19,080 --> 00:02:23,660 Hi. Jisimni Jason. 45 00:02:23,660 --> 00:02:26,710 Fl-aħħarnett, aħna ser tip "nieqaf." 46 00:02:26,710 --> 00:02:29,720 Jekk aħna issa lista kollha tal-fajls f'dan id-direttorju, 47 00:02:29,720 --> 00:02:33,770 naraw li dokument ġdid teżisti imsejħa doc.txt. 48 00:02:34,190 --> 00:02:36,110 Dik hija l-fajl f'dan il-programm biss maħluqa. 49 00:02:36,110 --> 00:02:40,520 U ovvjament, huwa wisq huwa xejn aktar minn sekwenza twila ta 'żero u dawk. 50 00:02:41,100 --> 00:02:43,260 Jekk aħna miftuħa dan il-fajl ġdid, 51 00:02:43,260 --> 00:02:45,870 naraw l-linji 3 tal-kodiċi aħna daħlu fis-programm tagħna - 52 00:02:46,060 --> 00:02:49,060 Hi. Isem Mejju huwa Jason. 53 00:02:49,580 --> 00:02:52,090 Imma x'inhu attwalment għaddejjin meta runs typewriter.c? 54 00:02:52,810 --> 00:02:55,520 L-ewwel linja ta 'interess għalina hija linja 24. 55 00:02:55,560 --> 00:02:58,490 F'dan il-linja, aħna niddikjaraw pointer fajl tagħna. 56 00:02:59,080 --> 00:03:03,140 Il-funzjoni li prospetti dan il-werrej, fopen, jieħu żewġ argumenti. 57 00:03:03,140 --> 00:03:07,440 L-ewwel huwa l-isem ta 'fajl inkluża l-estensjoni tal-fajl jekk ikun xieraq. 58 00:03:07,440 --> 00:03:10,980 Ifakkar li l-estensjoni fajl ma jinfluwenzax il-fajl fuq il-livell baxx tagħha. 59 00:03:10,980 --> 00:03:14,640 Aħna dejjem jittrattaw ma 'sekwenza twila ta' żero u dawk. 60 00:03:14,640 --> 00:03:19,630 Iżda dan ma influwenza kif fajls huma interpretati u applikazzjonijiet dak huma użati biex tiftaħ lilhom. 61 00:03:19,630 --> 00:03:22,290 It-tieni argument li fopen huwa ittra waħdanija 62 00:03:22,290 --> 00:03:25,300 li stands għal dak li aħna nippjanaw li nagħmlu wara we tiftaħ il-fajl. 63 00:03:25,300 --> 00:03:30,630 Hemm tliet għażliet għal dan l-argument - W, R, u A. 64 00:03:30,630 --> 00:03:34,900 Imxejna magħżul w f'dan il-każ għaliex irridu li jikteb lill-fajl. 65 00:03:34,900 --> 00:03:38,820 R, kif inti tista 'probabbilment raden, huwa għall-qari għall-fajl. 66 00:03:38,820 --> 00:03:41,760 U huwa għall jpoġġu għall-fajl. 67 00:03:41,760 --> 00:03:44,960 Filwaqt li kemm w u jista 'jintuża għall-kitba għall-fajls, 68 00:03:44,960 --> 00:03:47,460 w se tibda tikteb mill-bidu tal-fajl 69 00:03:47,460 --> 00:03:50,810 u potenzjalment jissostitwixxu kwalunkwe data li qabel kienu maħżuna. 70 00:03:50,810 --> 00:03:54,070 Konvenzjonalment, l-fajl aħna miftuħa, jekk ma jkunux diġà jeżistu, 71 00:03:54,070 --> 00:03:57,180 huwa maħluq fl-direttorju tax-xogħol tagħna preżenti. 72 00:03:57,180 --> 00:04:00,540 Madankollu, jekk irridu li jkollhom aċċess jew toħloq fajl f'post differenti, 73 00:04:00,540 --> 00:04:02,650 fl-ewwel argument ta 'fopen, 74 00:04:02,650 --> 00:04:05,840 aħna jistgħu jispeċifika mogħdija fajl minbarra l-isem ta 'fajl. 75 00:04:05,840 --> 00:04:09,490 Filwaqt li l-ewwel parti ta 'dan il-proċess huwa biss linja waħda tal-kodiċi twil, 76 00:04:09,490 --> 00:04:12,350 huwa dejjem prattika tajba li jinkludu sett ieħor ta 'linji 77 00:04:12,350 --> 00:04:15,930 li jivverifikaw biex jiżguraw li l-fajl kien b'suċċess miftuħa jew maħluqa. 78 00:04:15,930 --> 00:04:20,300 Jekk fopen prospetti nulli, aħna ma tkunx tixtieq li nimxu 'l quddiem mal-programm tagħna, 79 00:04:20,300 --> 00:04:23,270 u dan jista 'jiġri jekk is-sistema operattiva huwa barra ta' memorja 80 00:04:23,270 --> 00:04:27,940 jew jekk aħna tipprova tiftaħ fajl fil-direttorju li aħna ma jkollhom l-permessi xierqa. 81 00:04:27,940 --> 00:04:31,780 >> It-tieni parti tal-proċess iseħħ loop filwaqt typewriter s. 82 00:04:31,780 --> 00:04:35,000 Aħna nużaw funzjoni librerija CS50 biex tikseb input mill-utent, 83 00:04:35,000 --> 00:04:37,190 u jekk wieħed jassumi li ma jridux li nieqaf-programm, 84 00:04:37,190 --> 00:04:41,940 aħna nużaw l-fputs funzjoni li jieħdu l-sekwenza u jiktbu għall-fajl. 85 00:04:41,940 --> 00:04:46,700 fputs hija biss waħda mill-bosta funzjonijiet nistgħu jużaw biex jikteb lill-fajl. 86 00:04:46,700 --> 00:04:51,920 Oħrajn jinkludu fwrite, fputc, u anki fprintf. 87 00:04:51,920 --> 00:04:54,840 Irrispettivament mill-funzjoni partikolari aħna jispiċċaw jużaw, għalkemm, 88 00:04:54,840 --> 00:04:57,480 kollha kemm huma jeħtieġu li jkunu jafu, permezz argumenti tagħhom, 89 00:04:57,480 --> 00:04:59,670 mill-inqas żewġ affarijiet - 90 00:04:59,670 --> 00:05:03,140 dak li jeħtieġ li tkun miktuba u fejn jeħtieġ li jiġu miktuba sabiex. 91 00:05:03,140 --> 00:05:07,240 Fil-każ tagħna, input huwa l-sekwenza li jeħtieġ li tkun miktuba 92 00:05:07,240 --> 00:05:11,290 u fp huwa l-pointer li jidderiġi ahna fejn aħna qed miktub. 93 00:05:11,290 --> 00:05:15,330 F'dan il-programm, parti tnejn ta 'l-proċess huwa pjuttost sempliċi. 94 00:05:15,330 --> 00:05:17,360 Aħna qed sempliċement jieħdu string mill-utent 95 00:05:17,360 --> 00:05:22,120 u żżidu direttament għall-fajl tagħna bi ftit għall-ebda input validazzjoni jew kontrolli ta 'sigurtà. 96 00:05:22,120 --> 00:05:26,160 Spiss, madankollu, parti tnejn se jieħdu l-biċċa l-kbira tal-kodiċi tiegħek. 97 00:05:26,160 --> 00:05:30,580 Fl-aħħarnett, parti 3 huwa fuq il-linja 58, fejn aħna tagħlaq il-fajl. 98 00:05:30,580 --> 00:05:34,860 Here we call fclose u tgħaddih pointer tagħna inkartament oriġinali. 99 00:05:34,860 --> 00:05:39,500 Fil-linja sussegwenti, nerġgħu lura żero, sinjalar l-aħħar tal-programm tagħna. 100 00:05:39,500 --> 00:05:42,630 U, iva, parti 3 huwa sempliċi bħal dik. 101 00:05:42,630 --> 00:05:45,260 >> Ejja jimxu fuq qari mill-fajls. 102 00:05:45,260 --> 00:05:48,220 Lura fl-direttorju tagħna għandna fajl imsejjaħ printer.c. 103 00:05:48,220 --> 00:05:50,910 Ejja run mal-fajl aħna biss maħluqa - 104 00:05:50,910 --> 00:05:53,350 doc.txt. 105 00:05:53,350 --> 00:05:58,150 Dan il-programm, kif tissuġġerixxi l-isem, sempliċiment se jistampa l-kontenut tal-fajl mgħoddi lilha. 106 00:05:58,150 --> 00:06:00,230 U hemm aħna għandna hija. 107 00:06:00,230 --> 00:06:03,780 Il-linji ta 'kodiċi kellna ittajpjat qabel u salvati fil doc.txt. 108 00:06:03,780 --> 00:06:06,980 Hi. Jisimni Jason. 109 00:06:06,980 --> 00:06:09,120 Jekk aħna adsa fis printer.c, 110 00:06:09,120 --> 00:06:13,570 naraw li ħafna tal-kodiċi jistenna simili għal dak li aħna biss mixi permezz ta 'fil typewriter.c. 111 00:06:13,570 --> 00:06:16,720 Tabilħaqq linja 22, fejn aħna miftuħa l-fajl, 112 00:06:16,720 --> 00:06:19,220 u l-linja 39, fejn aħna għalqet il-fajl, 113 00:06:19,220 --> 00:06:23,890 huma t-tnejn kważi identiċi għal typewriter.c, ħlief għal argument fopen 2. 114 00:06:23,890 --> 00:06:26,510 Din id-darba aħna qed qari mill-fajl, 115 00:06:26,510 --> 00:06:29,040 hekk aħna għażlu r minflok w. 116 00:06:29,040 --> 00:06:31,950 Għalhekk, ejja tiffoka fuq it-tieni parti tal-proċess. 117 00:06:31,950 --> 00:06:36,060 F'konformità 35, bħala l-kondizzjoni tieni 4 loop tagħna, 118 00:06:36,060 --> 00:06:38,590 nagħmlu sejħa biex fgets, 119 00:06:38,590 --> 00:06:42,190 il-funzjoni anëillari li fputs minn qabel. 120 00:06:42,190 --> 00:06:44,660 Din id-darba għandna tliet argumenti. 121 00:06:44,660 --> 00:06:48,810 L-ewwel hija l-pointer għall-firxa ta 'karattri, fejn l-sekwenza tkun maħżuna. 122 00:06:48,810 --> 00:06:52,670 It-tieni huwa n-numru massimu ta 'karattri li jinqraw. 123 00:06:52,670 --> 00:06:56,010 U l-tielet huwa l-pointer għall-fajl li aħna qed jaħdmu. 124 00:06:56,010 --> 00:07:00,780 Int ser ikollok avviż li l-linja ta tispiċċa meta fgets prospetti nulli. 125 00:07:00,780 --> 00:07:02,940 Hemm żewġ raġuni li dan seta 'ġara. 126 00:07:02,940 --> 00:07:05,380 L-ewwel, żball seta 'seħħ. 127 00:07:05,380 --> 00:07:10,740 It-tieni, u aktar probabbli, it-tmiem tal-fajl intlaħaq u f'karattri mhux aktar kienu jinqraw. 128 00:07:10,740 --> 00:07:14,040 Fil-każ li int mintix, żewġ funzjonijiet jeżistu li jippermettu magħna biex tgħid 129 00:07:14,040 --> 00:07:17,160 liema raġuni hija l-kawża ta 'dan il-werrej null partikolari. 130 00:07:17,160 --> 00:07:21,090 U, mhux sorpriża, peress li dawn għandhom x'jaqsmu ma 'ħidma ma' fajls, 131 00:07:21,090 --> 00:07:26,940 kemm il-funzjoni ferror u l-bidu funzjoni feof mal-f ittra. 132 00:07:26,940 --> 00:07:32,130 >> Fl-aħħarnett, qabel aħna nikkonkludu, wieħed Nota malajr dwar it-tmiem ta 'funzjoni fajl, 133 00:07:32,130 --> 00:07:36,690 li, kif għadu kif issemma, huwa miktub kif feof. 134 00:07:36,690 --> 00:07:41,550 Spiss inti ser issib ruħek bl-użu waqt u għal linji biex progressivament taqra tiegħek mod permezz ta 'fajls. 135 00:07:41,550 --> 00:07:45,790 Għalhekk, ikollok bzonn mod biex tintemm dawn loops wara li inti jilħqu t-tmiem ta 'dawn il-fajls. 136 00:07:45,790 --> 00:07:50,510 Isejħu feof fuq pointer fajl tiegħek u verifika biex tara jekk huwa veru 137 00:07:50,510 --> 00:07:52,310 se tagħmel dan. 138 00:07:52,310 --> 00:07:59,820 Għalhekk, filwaqt li loop mal-kundizzjoni (! Feof (FP)) jista 'jidher bħala soluzzjoni perfettament adatta. 139 00:07:59,820 --> 00:08:03,770 Madankollu, ngħidu aħna għandna linja waħda jitħalla fil-fajl test tagħna. 140 00:08:03,770 --> 00:08:07,130 Aħna ser jidħol loop filwaqt tagħna u kollox se taħdem kif ippjanat. 141 00:08:07,130 --> 00:08:12,750 Fuq il-fażi li jmiss permezz ta ', programm tagħna se tikkontrolla biex tara jekk feof ta fp huwa veru, 142 00:08:12,750 --> 00:08:15,430 iżda - u dan huwa l-punt kruċjali li wieħed jifhem hawn - 143 00:08:15,430 --> 00:08:17,770 mhux se jkun veru għadha biss. 144 00:08:17,770 --> 00:08:21,110 Dak għax l-iskop ta 'feof mhuwiex li tivverifika 145 00:08:21,110 --> 00:08:24,400 jekk is-sejħa li jmiss għal funzjoni taqra se tolqot it-tmiem tal-fajl, 146 00:08:24,400 --> 00:08:28,190 iżda pjuttost biex tivverifika jekk jew le l-aħħar tal-fajl diġà ntlaħaq. 147 00:08:28,190 --> 00:08:30,140 Fil-każ ta 'dan l-eżempju, 148 00:08:30,140 --> 00:08:32,780 qari tal-aħħar linja tal-fajl tagħna tmur perfettament tajjeb, 149 00:08:32,780 --> 00:08:36,210 iżda l-programm ma tafx li konna hit-aħħar tal-fajl tagħna. 150 00:08:36,210 --> 00:08:40,549 Mhuwiex sakemm ma wieħed jaqra addizzjonali li hija counters t-tmiem tal-fajl. 151 00:08:40,549 --> 00:08:43,210 Għalhekk, kundizzjoni korretta tkun li ġej: 152 00:08:43,210 --> 00:08:49,330 fgets u tliet argumenti tagħha - produzzjoni, id-daqs ta 'produzzjoni, u FP - 153 00:08:49,330 --> 00:08:52,570 u kollha ta 'dak li ma ugwali għal null. 154 00:08:52,570 --> 00:08:55,260 Dan huwa l-approċċ ħadna fil printer.c, 155 00:08:55,260 --> 00:08:57,890 u f'dan il-każ, wara l-ħruġ loop, 156 00:08:57,890 --> 00:09:04,290 inti tista 'sejħa feof jew ferror li jinforma lill-utent dwar il-motivazzjoni speċifika għall-ħruġ f'dan loop. 157 00:09:04,290 --> 00:09:08,100 >> Kitba għal u qari mill-fajl huwa, l-aktar bażiċi tagħha, 158 00:09:08,100 --> 00:09:10,150 sempliċi 3-parti proċess. 159 00:09:10,150 --> 00:09:12,530 L-ewwel, aħna tiftaħ il-fajl. 160 00:09:12,530 --> 00:09:16,740 It-tieni, npoġġux xi affarijiet fil-fajl tagħna jew tieħu xi affarijiet minnha. 161 00:09:16,740 --> 00:09:19,200 It-tielet, aħna qrib il-fajl. 162 00:09:19,200 --> 00:09:21,170 L-ewwel u l-aħħar huma faċli. 163 00:09:21,170 --> 00:09:23,920 Il-parti tan-nofs huwa fejn l-għalf delikata tinsab. 164 00:09:23,920 --> 00:09:27,760 U għalkemm taħt il-barnuża aħna qed dejjem jittrattaw ma 'sekwenza twila ta' żero u dawk, 165 00:09:27,760 --> 00:09:30,710 ma tgħin meta kodifika biex iżżid saff ta 'estrazzjoni 166 00:09:30,710 --> 00:09:35,350 li jixgħel l-sekwenza fis xi ħaġa li jixbaħ iżjed dak li aħna qed jintużaw biex jaraw. 167 00:09:35,350 --> 00:09:39,570 Per eżempju, jekk aħna qed jaħdmu ma 'fajl Bitmap 24-bit, 168 00:09:39,570 --> 00:09:43,290 aħna ser x'aktarx tkun qari jew bil-miktub tlett bytes kull darba. 169 00:09:43,290 --> 00:09:46,450 F'liema każ, ikun jagħmel sens li jiġu definiti u xieraq l-isem 170 00:09:46,450 --> 00:09:48,980 a Struct li huwa ta '3 bytes kbir. 171 00:09:48,980 --> 00:09:51,410 >> Għalkemm ħidma ma 'fajls jista' jidher ikkumplikat, 172 00:09:51,410 --> 00:09:54,530 użu minnhom jippermetti li tagħmel xi ħaġa verament eċċezzjonali. 173 00:09:54,530 --> 00:09:58,880 Aħna jistgħu jbiddlu l-istat tal-dinja ta 'barra programm tagħna, 174 00:09:58,880 --> 00:10:01,730 nistgħu noħolqu xi ħaġa li jgħix lil hinn mill-ħajja tal-programm tagħna, 175 00:10:01,730 --> 00:10:07,190 jew nistgħu saħansitra l-bidla xi ħaġa li kienet maħluqa qabel programm tagħna bdiet taħdem. 176 00:10:07,190 --> 00:10:11,210 Interazzjoni ma 'fajls hija parti tassew qawwija ta' programmazzjoni C. 177 00:10:11,210 --> 00:10:15,300 u jien eċċitati biex tara dak li int ser toħloq magħha fil-kodiċi li ġejjin. 178 00:10:15,300 --> 00:10:19,770 Jisimni Jason Hirschhorn. Dan huwa CS50. 179 00:10:19,770 --> 00:10:21,770 [CS50.TV] 180 00:10:21,770 --> 00:10:25,940 >> [Daħk] 181 00:10:25,940 --> 00:10:29,330 Okay. Wieħed jieħu. Here we go. 182 00:10:49,000 --> 00:10:52,140 Meta naħsbu ta 'fajl - >> Oh, stenna. Jiddispjacini. 183 00:10:52,140 --> 00:10:56,800 [Daħk] Okay. 184 00:11:06,620 --> 00:11:09,970 Ħej hemm. 185 00:11:13,670 --> 00:11:16,310 Meta naħsbu ta 'fajl - 186 00:11:17,610 --> 00:11:20,710 Meta taħseb ta 'fajl - Okay. Tell me meta int lest. 187 00:11:20,710 --> 00:11:22,520 Oh, kbir. 188 00:11:22,520 --> 00:11:26,180 Għalkemm qari mill-teleprompter jista 'jidher - l-ebda. Bad tiegħi.