1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Fitxategia I / O] 2 00:00:02,000 --> 00:00:04,000 [Jason Hirschhorn, Harvard Unibertsitatea] 3 00:00:04,000 --> 00:00:07,000 [Hau da CS50, CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Fitxategi bat dela uste dugu, zer dator burura Microsoft Word dokumentu bat da, 5 00:00:11,000 --> 00:00:14,000 JPEG irudi bat, edo MP3 song, 6 00:00:14,000 --> 00:00:17,000 eta elkarreragin modu ezberdinetan fitxategi mota horietako bakoitzean. 7 00:00:17,000 --> 00:00:20,000 Esate baterako, Word dokumentu batean testua gehitzen dugu 8 00:00:20,000 --> 00:00:24,000 JPEG irudi bat moztu kanpo dugu agian ertzak edo koloreak retouch. 9 00:00:24,000 --> 00:00:28,000 Hala ere, kanpaia pean gure ordenagailuan fitxategiak besterik ez dira 10 00:00:28,000 --> 00:00:31,000 zeroen eta bai sekuentzia luze bat baino. 11 00:00:31,000 --> 00:00:33,000 Sortu da aplikazio zehatz fitxategia elkarreraginean 12 00:00:33,000 --> 00:00:38,000 zenbat denbora sekuentzia hori tramitatzeko eta erabiltzaileari aurkeztuko erabakitzeko. 13 00:00:38,000 --> 00:00:41,000 Alde batetik, dokumentu bat besterik ez byte begiratu, 14 00:00:41,000 --> 00:00:45,000 edo 8 zeroen eta direnak, eta pantailan erakutsi ASCII karaktere bat. 15 00:00:45,000 --> 00:00:48,000 Beste alde batetik, bitmap irudi bat 3 byte begiratu, 16 00:00:48,000 --> 00:00:50,000 edo 24 zeroen eta bai, 17 00:00:50,000 --> 00:00:53,000 interpretatu eta 3 zenbakiak hamaseitarretan 18 00:00:53,000 --> 00:00:56,000 ordezkatzen dituzten balio gorria, berdea eta urdina 19 00:00:56,000 --> 00:00:58,000 irudi baten pixel bat. 20 00:00:58,000 --> 00:01:01,000 Whatever begiratu ahal izango dute atsegin zure pantailan, core, 21 00:01:01,000 --> 00:01:05,000 fitxategiak dira, ez da ezer zeroen eta bai sekuentzia bat baino gehiago. 22 00:01:05,000 --> 00:01:08,000 Hargatik murgiltze eta begiratu nola manipulatzen dugu zeroen eta bai horiek 23 00:01:08,000 --> 00:01:12,000 orduan fitxategi batetik irakurtzea eta idaztea. 24 00:01:12,000 --> 00:01:15,000 >> Hasteko, hautsi behera 3-parte prozesu erraza sartu dut. 25 00:01:15,000 --> 00:01:19,000 Ondoren, bi adibide kodea erakusten dituzten hiru zati horiek murgiltze dut. 26 00:01:19,000 --> 00:01:23,000 Azkenik, prozesua berrikusi dut eta bere xehetasunak garrantzitsuenetako batzuk. 27 00:01:23,000 --> 00:01:25,000 Zure mahaigaineko esertzen edozein fitxategi bezala, 28 00:01:25,000 --> 00:01:28,000 lehenengo gauza egin behar da irekitzeko. 29 00:01:28,000 --> 00:01:31,000 C hori egiten dugu erakuslea geratuko aurredefinitutako struct 30 00:01:31,000 --> 00:01:33,000 diskoan fitxategi bat adierazten du. 31 00:01:33,000 --> 00:01:38,460 Funtzio-dei honetan ere, erabaki nahi dugu ala ez dugu idatzi edo fitxategia irakurri. 32 00:01:38,460 --> 00:01:41,660 Gero, benetako irakurketa eta idazketa egiten dugu. 33 00:01:41,660 --> 00:01:44,800 Daude funtzio espezializatuak zati hau erabili ahal izango dugu, 34 00:01:44,800 --> 00:01:48,790 eta ia denak gutun F, fitxategia nabarmentzen hasten dira. 35 00:01:48,790 --> 00:01:53,560 Azkenik, goiko izkinan fitxategi X gorri txiki Akin zure ordenagailuan ireki, 36 00:01:53,560 --> 00:01:56,680 funtzio-dei final fitxategia itxi egiten dugu. 37 00:01:56,680 --> 00:01:59,540 Orain zer egin behar dugu ideia orokor bat dugula, 38 00:01:59,540 --> 00:02:02,000 dezagun kodea sartu dive. 39 00:02:02,000 --> 00:02:06,100 >> Direktorio honetan, bi C fitxategiak eta dagozkien fitxategi exekutagarriekin dugu. 40 00:02:06,100 --> 00:02:09,710 Typewriter programa bat komando-lerroko argumentu bat hartzen du, 41 00:02:09,710 --> 00:02:12,060 Dokumentuaren izena sortu nahi dugu. 42 00:02:12,060 --> 00:02:16,160 Kasu honetan, deitu doc.txt dugu. 43 00:02:16,160 --> 00:02:19,080 Dezagun exekutatu programa eta lerro pare bat idatzi. 44 00:02:19,080 --> 00:02:23,660 Hi. Nire izena Jason da. 45 00:02:23,660 --> 00:02:26,710 Azkenik, idatzi dugu "irteteko." 46 00:02:26,710 --> 00:02:29,720 Gaur egun zerrendara fitxategi guztiak direktorio honetan 47 00:02:29,720 --> 00:02:33,770 dokumentu berri bat izeneko doc.txt existitzen dela ikusten dugu. 48 00:02:34,190 --> 00:02:36,110 Fitxategia programa hau sortu da. 49 00:02:36,110 --> 00:02:40,520 Eta, jakina, handiegia da zeroen eta bai sekuentzia luze bat baino gehiago ez. 50 00:02:41,100 --> 00:02:43,260 Ireki fitxategi berria bada, 51 00:02:43,260 --> 00:02:45,870 3 kode lerro sartu dugu gure programa ikusiko dugu 52 00:02:46,060 --> 00:02:49,060 Hi. May name Jason da. 53 00:02:49,580 --> 00:02:52,090 Baina zer gertatzen da benetan denean typewriter.c runs on? 54 00:02:52,810 --> 00:02:55,520 Interes-line Gurekin line 24. 55 00:02:55,560 --> 00:02:58,490 Ildo horretatik,, gure fitxategia erakuslea aldarrikatzen dugu. 56 00:02:59,080 --> 00:03:03,140 Hau erakuslea, fopen itzultzen duen funtzioa Bi argumentu hartzen ditu. 57 00:03:03,140 --> 00:03:07,440 Lehenengo eta behin, hala badagokio, fitxategi-luzapena barne fitxategi-izena da. 58 00:03:07,440 --> 00:03:10,980 Gogoratu fitxategi-luzapena ez duen eragina izan, bere maila txikiena fitxategia. 59 00:03:10,980 --> 00:03:14,640 Beti ari gara aurre zeroen eta bai sekuentzia luze bat. 60 00:03:14,640 --> 00:03:19,630 Baina eragina du nola fitxategiak interpretatuko dira, eta zer aplikazio erabiltzen dira horiek irekitzeko. 61 00:03:19,630 --> 00:03:22,290 Fopen argudio bigarren letra bakar bat da 62 00:03:22,290 --> 00:03:25,300 ireki fitxategia ondoren egiteko asmoa dugu dago. 63 00:03:25,300 --> 00:03:30,630 Badira hiru argumentu honen aukerak - W, R, eta A. 64 00:03:30,630 --> 00:03:34,900 Honako hau aukeratu dugu w kasu honetan, nahi dugun fitxategian idatzi duelako. 65 00:03:34,900 --> 00:03:38,820 R, ziurrenik asmatzea da fitxategia irakurtzean. 66 00:03:38,820 --> 00:03:41,760 Eta fitxategi erantsi da. 67 00:03:41,760 --> 00:03:44,960 Bai w eta fitxategiak idatziz erabil daitezke bitartean, 68 00:03:44,960 --> 00:03:47,460 w fitxategia hasieran idazten hasiko da 69 00:03:47,460 --> 00:03:50,810 eta potentzialki ordezkatu duten aldez aurretik gordetako edozein datu. 70 00:03:50,810 --> 00:03:54,070 Berez, fitxategi, ireki ez badu dagoeneko existitzen, 71 00:03:54,070 --> 00:03:57,180 da gure lan present direktorioa sortu. 72 00:03:57,180 --> 00:04:00,540 Hala eta guztiz ere, sartzeko edo beste kokaleku batean fitxategi bat sortu nahi dugu, 73 00:04:00,540 --> 00:04:02,650 fopen lehen argumentua, 74 00:04:02,650 --> 00:04:05,840 file name gain, fitxategi-bide bat ezarri ahal izango dugu. 75 00:04:05,840 --> 00:04:09,490 Prozesu honen lehenengo zatian, kode-lerro luze bat besterik ez den bitartean, 76 00:04:09,490 --> 00:04:12,350 beti da praktika onak lerro multzo bat 77 00:04:12,350 --> 00:04:15,930 dela egiaztatu fitxategia zuzen ireki edo sortu ziurtatzeko. 78 00:04:15,930 --> 00:04:20,300 Fopen null itzultzen bada, ez genuke nahi gure programa aurrera, 79 00:04:20,300 --> 00:04:23,270 eta hau gertatzen dena da sistema eragilearen memoria 80 00:04:23,270 --> 00:04:27,940 edo fitxategi bat irekitzen duen direktorioa ez dugu behar den baimenik saiatu gara. 81 00:04:27,940 --> 00:04:31,780 >> Taldea bi prozesua gertatzen typewriter bitartean loop. 82 00:04:31,780 --> 00:04:35,000 CS50 liburutegi funtzioa erabiltzen dugu, erabiltzaileak sarrera lortzeko, 83 00:04:35,000 --> 00:04:37,190 eta ez dute nahi programatik irten suposatuz, 84 00:04:37,190 --> 00:04:41,940 funtzioa fputs erabiltzen dugu katea hartu eta idazteko fitxategia. 85 00:04:41,940 --> 00:04:46,700 fputs hainbat funtzio bat erabili dugu fitxategia idazteko izan da. 86 00:04:46,700 --> 00:04:51,920 Beste batzuk fwrite, fputc, eta are fprintf. 87 00:04:51,920 --> 00:04:54,840 Kontuan hartu gabe funtzio jakin amaituko dugu, nahiz eta, 88 00:04:54,840 --> 00:04:57,480 horiek guztiak jakin behar, bere argumentuak bidez, 89 00:04:57,480 --> 00:04:59,670 gutxienez bi gauza - 90 00:04:59,670 --> 00:05:03,140 zer idatzi behar dira, eta non idatzi behar behar da. 91 00:05:03,140 --> 00:05:07,240 Gure kasuan, sarrerako kate behar idatzi behar da 92 00:05:07,240 --> 00:05:11,290 eta LHko zuzentzen duen erakuslea non idazten ari gara. 93 00:05:11,290 --> 00:05:15,330 Programa honetan, prozesua bi parte nahiko erraza. 94 00:05:15,330 --> 00:05:17,360 Besterik ez kate bat hartzen ari gara, erabiltzaileak 95 00:05:17,360 --> 00:05:22,120 eta gehituz zuzenean gure koadernoan apur-to-no input baliozkotzea edo segurtasun egiaztapenak. 96 00:05:22,120 --> 00:05:26,160 Askotan, ordea, zati bi egingo da zure kodea soltean. 97 00:05:26,160 --> 00:05:30,580 Azkenik, hiru zati line 58 da, non fitxategia itxi egiten dugu. 98 00:05:30,580 --> 00:05:34,860 Hemen, fclose eta gure jatorrizko fitxategia erakuslea gainditu deitzen diogu. 99 00:05:34,860 --> 00:05:39,500 Ondorengo lerro, zero itzuli gara, gure programaren amaiera seinaleztatzeko. 100 00:05:39,500 --> 00:05:42,630 Eta, hori bai, hiru zati gisa duten bezain sinplea da. 101 00:05:42,630 --> 00:05:45,260 >> Dezagun fitxategiak irakurtzean mugitzeko. 102 00:05:45,260 --> 00:05:48,220 Itzuli gure direktorioan printer.c izeneko fitxategi bat daukagu. 103 00:05:48,220 --> 00:05:50,910 Dezagun exekutatu fitxategia sortu besterik ez dugu 104 00:05:50,910 --> 00:05:53,350 doc.txt. 105 00:05:53,350 --> 00:05:58,150 Programa honek, izena dioen bezala, erraz inprimatu fitxategiaren edukia gainditu. 106 00:05:58,150 --> 00:06:00,230 Eta hor egon behar dugu. 107 00:06:00,230 --> 00:06:03,780 Kode lerro idatzi izan dugun eta gordetako doc.txt. 108 00:06:03,780 --> 00:06:06,980 Hi. Nire izena Jason da. 109 00:06:06,980 --> 00:06:09,120 Dive printer.c sartu badugu, 110 00:06:09,120 --> 00:06:13,570 kodea asko typewriter.c bidez besterik ez dugu ibili antzeko itxura ikusiko dugu. 111 00:06:13,570 --> 00:06:16,720 Izan ere, linea 22, non fitxategia ireki dugu, 112 00:06:16,720 --> 00:06:19,220 eta linea 39, fitxategia non itxi dugu, 113 00:06:19,220 --> 00:06:23,890 dira, bai ia typewriter.c berdina, fopen argumentua bigarren gorde. 114 00:06:23,890 --> 00:06:26,510 Oraingoan, fitxategi batetik irakurtzen ari gara, 115 00:06:26,510 --> 00:06:29,040 beraz, aukeratu dugu w r ordez. 116 00:06:29,040 --> 00:06:31,950 Horrela, dezagun prozesuaren bigarren zatian zentratu. 117 00:06:31,950 --> 00:06:36,060 Line 35, gure 4 begizta bigarren baldintza gisa, 118 00:06:36,060 --> 00:06:38,590 Dei bat egiten dugu, fgets 119 00:06:38,590 --> 00:06:42,190 aurretik fputs companion funtzioa. 120 00:06:42,190 --> 00:06:44,660 Oraingoan, hiru argumentu ditugu. 121 00:06:44,660 --> 00:06:48,810 Katea gordeko dira karaktere array erakuslea da. 122 00:06:48,810 --> 00:06:52,670 Bigarren karaktere kopurua gehienez ere irakurri behar da. 123 00:06:52,670 --> 00:06:56,010 Eta hirugarren lan egiten ari gara fitxategi erakuslea da. 124 00:06:56,010 --> 00:07:00,780 Loop for amaitzen da fgets null itzultzen du nabarituko duzu. 125 00:07:00,780 --> 00:07:02,940 Daude bi arrazoi hori gertatu da, agian. 126 00:07:02,940 --> 00:07:05,380 Lehenik eta behin, akats bat gertatu da, agian. 127 00:07:05,380 --> 00:07:10,740 Bigarrena, eta litekeena da, fitxategia amaieran iritsi ziren eta ez karaktere gehiago irakurri. 128 00:07:10,740 --> 00:07:14,040 Kasu horretan, galdetzen ari bazara, bi funtzioak onartzea kontatu digu existitzen ez 129 00:07:14,040 --> 00:07:17,160 eta horregatik hau null bereziki erakuslea kausa da. 130 00:07:17,160 --> 00:07:21,090 Eta, ez da harritzekoa, fitxategiekin lan egin dute geroztik, 131 00:07:21,090 --> 00:07:26,940 bai ferror funtzioa eta feof funtzioa Irteeran gutun f. 132 00:07:26,940 --> 00:07:32,130 >> Azkenik, aurretik dugu, buruzko ohar bat, fitxategi funtzioa amaiera azkar, 133 00:07:32,130 --> 00:07:36,690 Izan ere, aipatu bezala, feof gisa idatzia. 134 00:07:36,690 --> 00:07:41,550 Sarritan, zeure burua aurkituko duzu eta bitartean loops your way fitxategiak bidez pixkanaka-pixkanaka irakurri. 135 00:07:41,550 --> 00:07:45,790 Horrela, loops horiek amaitzeko modu bat behar duzu, fitxategi hauen amaieran iritsi ondoren. 136 00:07:45,790 --> 00:07:50,510 Deitzen feof zure koadernoan erakuslea eta, egia bada ikusteko checking 137 00:07:50,510 --> 00:07:52,310 besterik ez da egin lezake. 138 00:07:52,310 --> 00:07:59,820 Hori dela eta, baliteke baldintza loop (! Feof (LH)) bitartean irtenbide bezala primeran egokia dirudi. 139 00:07:59,820 --> 00:08:03,770 Hala ere, esan dugu gure testu-fitxategi batean lerro bat utzi. 140 00:08:03,770 --> 00:08:07,130 Gure bitartean loop sartu dugu eta guztia lan egingo du aurreikusita bezala. 141 00:08:07,130 --> 00:08:12,750 On hurrengo txandan bidez, gure programa LH-feof egia bada egiaztatuko du, 142 00:08:12,750 --> 00:08:15,430 baina - eta hau hemen ulertzeko puntu funtsezkoa da 143 00:08:15,430 --> 00:08:17,770 ez da egia besterik ez oraindik. 144 00:08:17,770 --> 00:08:21,110 Feof helburua ez delako egiaztatu 145 00:08:21,110 --> 00:08:24,400 irakurri funtzio bat dei hurrengo fitxategi amaieran hit bada, 146 00:08:24,400 --> 00:08:28,190 baizik ala ez fitxategi amaieran jada lortu ikusteko. 147 00:08:28,190 --> 00:08:30,140 Adibide honen kasuan, 148 00:08:30,140 --> 00:08:32,780 gure fitxategiaren azken lerrora irakurtzen primeran doa arazorik gabe, 149 00:08:32,780 --> 00:08:36,210 baina programa ez da oraindik ezagutzen ditudan dugu hit gure fitxategiaren amaieran. 150 00:08:36,210 --> 00:08:40,549 Ez da ez da bat irakurri osagarriak arte fitxategiaren amaieran counters da. 151 00:08:40,549 --> 00:08:43,210 Horrela, baldintza bat zuzena honako hau izango litzateke: 152 00:08:43,210 --> 00:08:49,330 fgets eta bere hiru argumentu - irteera, irteera tamaina, eta LH - 153 00:08:49,330 --> 00:08:52,570 eta hori ez da berdina null. 154 00:08:52,570 --> 00:08:55,260 Ikuspegia hartu printer.c da, 155 00:08:55,260 --> 00:08:57,890 eta, kasu honetan, loop irten ondoren, 156 00:08:57,890 --> 00:09:04,290 deitu feof edo ferror erabiltzaileari jakinaraziko begizta hau irteten arrazoiketa jakin asmoz. 157 00:09:04,290 --> 00:09:08,100 >> Fitxategi batetik irakurtzea eta idaztea da, bere oinarrizko 158 00:09:08,100 --> 00:09:10,150 3-prozesuan parte sinple bat. 159 00:09:10,150 --> 00:09:12,530 Lehenik eta behin, fitxategia ireki dugu. 160 00:09:12,530 --> 00:09:16,740 Bigarrena, gauza batzuk jarri genituen gure fitxategi edo gauza batzuk hartu daudelarik. 161 00:09:16,740 --> 00:09:19,200 Hirugarren, fitxategia itxi egiten dugu. 162 00:09:19,200 --> 00:09:21,170 Lehen eta azken zatiak dira erraza. 163 00:09:21,170 --> 00:09:23,920 Erdiko zatia da non stuff delikatua datza. 164 00:09:23,920 --> 00:09:27,760 Nahiz eta kanpaia azpian beti ari gara zeroen eta bai sekuentzia luze bat aurre, 165 00:09:27,760 --> 00:09:30,710 abstrakzio geruza bat gehitzeko kodeketa du 166 00:09:30,710 --> 00:09:35,350 sekuentzia bihurtzen da zerbait xehetasun gehiago antza zer gaude ikusteko erabiltzen. 167 00:09:35,350 --> 00:09:39,570 Esate baterako, 24-bit bit-mapa fitxategia ari gara lan egiten bada, 168 00:09:39,570 --> 00:09:43,290 Seguruenik egingo dugu aldi berean hiru byte idatzi edo irakurtzeko. 169 00:09:43,290 --> 00:09:46,450 Kasu horretan, zentzurik izango litzateke behar bezala definitu eta izendatu 170 00:09:46,450 --> 00:09:48,980 3 byte handi bat da, eta egitura. 171 00:09:48,980 --> 00:09:51,410 >> Fitxategiekin lan korapilatsu dirudien arren dezake, 172 00:09:51,410 --> 00:09:54,530 horiek erabiltzeko aukera ematen du,, zerbait benetan nabarmenak egin digu. 173 00:09:54,530 --> 00:09:58,880 Munduko egoera aldatu ahal izango dugu gure programa kanpo, 174 00:09:58,880 --> 00:10:01,730 gure programaren bizitza haratago bizi den zerbait sortu ahal izango dugu, 175 00:10:01,730 --> 00:10:07,190 edo nahiz eta aldatu ahal izango dugu zerbait sortu zen gure programa hasi exekutatu aurretik. 176 00:10:07,190 --> 00:10:11,210 Fitxategiak jarduteko programazioaren zati benetan indartsua C. 177 00:10:11,210 --> 00:10:15,300 eta zer kodea etorri sortu zaren ikusteko ilusioa dut. 178 00:10:15,300 --> 00:10:19,770 Nire izena Jason Hirschhorn da. Hau CS50 da. 179 00:10:19,770 --> 00:10:21,770 [CS50.TV] 180 00:10:21,770 --> 00:10:25,940 >> [Barreak] 181 00:10:25,940 --> 00:10:29,330 Ongi da. One hartu. Hemen goaz. 182 00:10:49,000 --> 00:10:52,140 Fitxategi bat dela uste dugu >> Oh, itxaron. Sentitzen dugu. 183 00:10:52,140 --> 00:10:56,800 [Barreak] Larreina. 184 00:11:06,620 --> 00:11:09,970 Hey there. 185 00:11:13,670 --> 00:11:16,310 Fitxategi bat dela uste dugu, 186 00:11:17,610 --> 00:11:20,710 Uste fitxategi bat - Ongi da. Esadazu denean prest zaude. 187 00:11:20,710 --> 00:11:22,520 Oh, great. 188 00:11:22,520 --> 00:11:26,180 Teleprompter bat irakurtzean arren badirudi - no. Nire txarra.