1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> Parolanto: Ĝis nun, ĝi estas verŝajna ke plimultaj viaj programoj 3 00:00:07,870 --> 00:00:10,170 estis iom efemera. 4 00:00:10,170 --> 00:00:13,310 Vi kuras programon kiel Mario aŭ avidaj. 5 00:00:13,310 --> 00:00:17,350 Ĝi faras iom, ĝi eble instigas la uzanto por iu informo, 6 00:00:17,350 --> 00:00:20,400 presi iuj eligo al la ekrano, sed tiam, kiam via programo estas finita, 7 00:00:20,400 --> 00:00:23,252 Tie estas vere neniu indico ekzistas ĝi estis iam kuri en la unua loko. 8 00:00:23,252 --> 00:00:25,960 Mi signifas, Certe, vi povus esti lasita ĝi malfermos en la fina fenestro, 9 00:00:25,960 --> 00:00:29,770 sed se vi demetas via ekrano, ekzistas vere neniu indico ke ĝi ekzistis. 10 00:00:29,770 --> 00:00:33,720 Ni ne havas rimedon stokante persista informo, informoj 11 00:00:33,720 --> 00:00:36,890 kiu ekzistas post nia programo haltis kurante, 12 00:00:36,890 --> 00:00:39,241 aŭ ni ne havas ĝis tiu punkto. 13 00:00:39,241 --> 00:00:41,490 Feliĉe tamen, c faras provizi nin per la kapablo 14 00:00:41,490 --> 00:00:44,220 fari tion per efektivigado iu nomita 15 00:00:44,220 --> 00:00:48,330 dosiero, strukturo kiu esence reprezentas dosiero kiu vi duobligus 16 00:00:48,330 --> 00:00:53,826 klaku sur via komputilo, se vi estas uzita grafika uzanto medio. 17 00:00:53,826 --> 00:00:55,700 Ĝenerale kiam laborante kun c, Ni efektive 18 00:00:55,700 --> 00:00:59,965 tuj estos laborante kun punteros al files-- dosiero stars-- 19 00:00:59,965 --> 00:01:02,090 krom iomete kiam ni parolas pri paro 20 00:01:02,090 --> 00:01:04,560 de la funkcioj kiuj labori kun dosiero punteros. 21 00:01:04,560 --> 00:01:08,990 Vi ne bezonas esti vere fosadis tro profunde en kompreno punteros 22 00:01:08,990 --> 00:01:09,730 sin. 23 00:01:09,730 --> 00:01:12,870 Ekzistas iom teeny iom kie ni parolos pri ili, 24 00:01:12,870 --> 00:01:18,090 sed ĝenerale file punteros kaj punteros, dum interrilatigitaj, 25 00:01:18,090 --> 00:01:20,290 ne ekzakte la sama afero. 26 00:01:20,290 --> 00:01:22,440 >> Nun kion mi volas diri kiam Mi diras persistaj datumoj? 27 00:01:22,440 --> 00:01:23,650 Kio estas persistaj datumoj? 28 00:01:23,650 --> 00:01:25,232 Kial ni zorgas pri ĝi? 29 00:01:25,232 --> 00:01:27,190 Diru, ekzemple, ke vi uzas programon 30 00:01:27,190 --> 00:01:29,850 aŭ vi reskribita kiel Programo kiu estas ludo, 31 00:01:29,850 --> 00:01:32,960 kaj vi volas konservi trako de ĉiuj la uzanto movas 32 00:01:32,960 --> 00:01:36,620 tiel ke eble se iu eliras malbone, vi povas revizii la dosieron post la ludo. 33 00:01:36,620 --> 00:01:39,970 Tion ni volas diri kiam ni paroli pri persistaj datumoj. 34 00:01:39,970 --> 00:01:43,930 >> En la paso de via kurado programo, dosiero estas kreita. 35 00:01:43,930 --> 00:01:45,680 Kiam via programo haltis kurante, 36 00:01:45,680 --> 00:01:48,689 ke dosiero ankoraŭ ekzistas en via sistemo. 37 00:01:48,689 --> 00:01:50,230 Kaj ni povas rigardi ĝin kaj ekzameni ĝin. 38 00:01:50,230 --> 00:01:53,670 Kaj por ke programo estus metita al kreis iuj konstantaj datumoj, 39 00:01:53,670 --> 00:01:57,390 datumoj ekzisti post la programo finis kurante. 40 00:01:57,390 --> 00:02:02,320 >> Nun ĉiuj tiuj funkcioj kiuj laboras kun kreanta dosierojn kaj manipulanta 41 00:02:02,320 --> 00:02:04,940 ilin diversmaniere vivi en norma io.h, 42 00:02:04,940 --> 00:02:08,210 kiu estas kaplinio dosiero kiu vi verŝajne estis funto 43 00:02:08,210 --> 00:02:10,910 inkluzive ĉe la supro de belaj multa ĉiuj viaj programoj 44 00:02:10,910 --> 00:02:14,130 ĉar ĝi enhavas unu el la plej utilaj funkcioj por ni, 45 00:02:14,130 --> 00:02:16,130 printf, kiu ankaŭ ebligas vivas en norma io.h. 46 00:02:16,130 --> 00:02:20,400 Do vi ne bezonas marteladi inkluzivi ajna aldona dosierojn probable 47 00:02:20,400 --> 00:02:23,540 por labori kun dosiero punteros. 48 00:02:23,540 --> 00:02:29,980 >> Nun ĉiu unuopa dosiero puntero funkcio, aŭ ĉiu unuopa dosiero / S, enigo eligo 49 00:02:29,980 --> 00:02:33,310 funkcio, akceptas kiel unu de liaj parametroj aŭ enigoj 50 00:02:33,310 --> 00:02:35,822 dosiero pointer-- krom cxar unu, fopen, kiu 51 00:02:35,822 --> 00:02:38,280 Estas kion vi uzas por akiri la dosieron montrilon en la unua loko. 52 00:02:38,280 --> 00:02:41,010 Sed post vi malfermis la Arkivo kaj vi ricevas dosieron punteros, 53 00:02:41,010 --> 00:02:43,510 Vi povas tiam pasi ilin kiel argumentoj al la diversaj funkcioj 54 00:02:43,510 --> 00:02:46,720 ni tuj parolos pri hodiaŭ, tiel kiel multaj aliaj 55 00:02:46,720 --> 00:02:48,520 por ke vi povas labori kun dosierojn. 56 00:02:48,520 --> 00:02:50,980 >> Do estas ses bela komuna bazaj 57 00:02:50,980 --> 00:02:52,870 ke ni iras paroli hodiaŭ. 58 00:02:52,870 --> 00:02:57,160 fopen kaj lia kompano funkcio fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 kaj lia kunulo funkcio fputc, kaj Fread kaj lia kunulo funkcio, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Do ni ricevas internen. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- kion ĝi faras? 63 00:03:07,050 --> 00:03:10,050 Nu, ĝi malfermas dosieron kaj ĝi donas vin dosieron puntero al ĝi, 64 00:03:10,050 --> 00:03:14,000 por ke vi povas tiam uzi tiun file puntero kiel argumento 65 00:03:14,000 --> 00:03:16,730 al ajna de la aliaj dosiero / S funkcioj. 66 00:03:16,730 --> 00:03:19,100 La plej grava afero memori kun fopen 67 00:03:19,100 --> 00:03:24,222 estas ke post kiam vi malfermis la file aŭ faris nomita kiel la ĉi tie, 68 00:03:24,222 --> 00:03:26,930 Vi devas kontroli por certiĝi ke la puntero ke vi revenis 69 00:03:26,930 --> 00:03:28,320 estas ne egala al nula. 70 00:03:28,320 --> 00:03:31,320 Se vi ne spektis la videon sur punteros, eble tio ne havas sencon. 71 00:03:31,320 --> 00:03:35,639 Sed se vi provas kaj dereference nula puntero revokon, 72 00:03:35,639 --> 00:03:38,180 Via programo estos probable suferas segmentación [inaudible]. 73 00:03:38,180 --> 00:03:40,540 Ni volas certigi ke ni ricevis legitiman montrilo reen. 74 00:03:40,540 --> 00:03:43,665 La vasta plimulto de la tempo ni volas akiris leĝan montrilo reen 75 00:03:43,665 --> 00:03:45,280 kaj ĝi ne estos problemo. 76 00:03:45,280 --> 00:03:46,760 >> Do kiel ni faras alvokon al fopen? 77 00:03:46,760 --> 00:03:48,051 Ĝi aspektas preskaux kiel tiu. 78 00:03:48,051 --> 00:03:52,690 Dosiero stelo ptr-- PTR esti genérico citi por dosiero pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 kaj ni pasas en du aferojn, dosiernomon kaj operacion ni volas entrepreni. 80 00:03:57,300 --> 00:04:01,690 Do ni havu alvoko kiu similas this-- dosieron stelo ptr 1 egalas fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 Kaj la operacio mi elektis estas r. 83 00:04:07,020 --> 00:04:08,639 >> Do kion vi pensas r estas ĉi tie? 84 00:04:08,639 --> 00:04:11,180 Kio estas la specoj de aferoj ni eble povus fari al dosieroj? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Do r estas la operacio kiu ni elekti kiam ni volas legi arkivon. 87 00:04:17,500 --> 00:04:20,260 Do ni volus esence kiam ni faras alvokon ŝatas tion 88 00:04:20,260 --> 00:04:25,440 esti akiranta nin dosiero montrilon tia, ke ni povis tiam legi informojn 89 00:04:25,440 --> 00:04:27,770 el file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Simile, ni povus malfermi dosieron 2.txt por skribo kaj tiel ni povos tradormi ptr2, 91 00:04:34,190 --> 00:04:38,210 la dosiera montrilo mi kreis ĉi tie, kiel argumento por ajna funkcio kiu 92 00:04:38,210 --> 00:04:40,080 skribas informon en dosieron. 93 00:04:40,080 --> 00:04:43,767 Kaj simila al skribo, ekzistas ankaŭ la eblon append, al. 94 00:04:43,767 --> 00:04:45,600 La diferenco inter skribado kaj appending 95 00:04:45,600 --> 00:04:50,920 esti ke kiam vi skribas al dosiero, se vi fari alvokon al fopen por skribado 96 00:04:50,920 --> 00:04:54,761 kaj ke dosiero jam ekzistas, ĝi estas tuj anstataŭigi la tutan dosieron. 97 00:04:54,761 --> 00:04:56,510 Ĝi tuj komencas tuj en la komenco, 98 00:04:56,510 --> 00:04:58,820 viŝante ĉiu informo tio jam ekzistas. 99 00:04:58,820 --> 00:05:02,210 >> Dum se vi malfermas ŝin por appending, ĝi iros al la fino de la dosiero 100 00:05:02,210 --> 00:05:04,340 se estas jam malplena ĝi aŭ informo en ĝi, 101 00:05:04,340 --> 00:05:06,040 kaj ĝi tiam komencas skribado de tie. 102 00:05:06,040 --> 00:05:08,570 Do vi ne perdas neniun de la informoj vi faris antaŭe. 103 00:05:08,570 --> 00:05:12,110 Ĉu vi volas skribi aux append ia dependas de la situacio. 104 00:05:12,110 --> 00:05:16,840 Sed vi probable scias kion la dekstra operacio estas kiam la tempo venas. 105 00:05:16,840 --> 00:05:18,020 Do jen fopen. 106 00:05:18,020 --> 00:05:18,930 >> Kio pri fclose? 107 00:05:18,930 --> 00:05:21,600 Nu, bela simple, fclose nur akceptas la dosiera montrilo. 108 00:05:21,600 --> 00:05:24,000 Kaj kiel vi povus atendi, Fermo de tiu dosiero. 109 00:05:24,000 --> 00:05:29,270 Kaj unufoje ni fermis dosiero, ni ne povas elfari plu dosiero / S funkcioj, 110 00:05:29,270 --> 00:05:31,420 legi aŭ skribi en tiu dosiero. 111 00:05:31,420 --> 00:05:36,444 Ni devas re-malfermi la file alifoje por 112 00:05:36,444 --> 00:05:38,610 daŭrigi laborante kun ĝin uzante la I / O funkcioj. 113 00:05:38,610 --> 00:05:41,520 Do fclose rimedoj ni faris laborante kun ĉi tiu dosiero. 114 00:05:41,520 --> 00:05:44,690 Kaj ĉiuj ni devas pasi en estas la nomo de dosiero puntero. 115 00:05:44,690 --> 00:05:50,010 Do sur paro glitas antaŭe, Ni fopened dosiero 1 skalara teksto por legado 116 00:05:50,010 --> 00:05:52,854 kaj ni atribuita ke dosieran montrilon al ptr1. 117 00:05:52,854 --> 00:05:55,020 Nun ni decidis ke ni estas faris legadon de tiu dosiero. 118 00:05:55,020 --> 00:05:56,561 Ni ne bezonas fari plu per ĝi. 119 00:05:56,561 --> 00:05:58,890 Ni povas nur fclose ptr1. 120 00:05:58,890 --> 00:06:01,950 Kaj simile, eble ni fclose la alia ones. 121 00:06:01,950 --> 00:06:02,450 Bone. 122 00:06:02,450 --> 00:06:03,700 Do jen malfermante kaj fermante. 123 00:06:03,700 --> 00:06:05,780 Tiuj estas la du bazaj komencante operaciojn. 124 00:06:05,780 --> 00:06:08,050 >> Nun ni volas reale fari iuj interesaj aĵoj, 125 00:06:08,050 --> 00:06:11,940 kaj la unua funkcio, ke ni vidi kiu faros ke estas fgetc-- 126 00:06:11,940 --> 00:06:14,110 file akiri karaktero. 127 00:06:14,110 --> 00:06:17,350 Tion fgetc ĝenerale tradukus al. 128 00:06:17,350 --> 00:06:20,190 Lia objektivo en la vivo estas legi la venonta signo, 129 00:06:20,190 --> 00:06:22,079 aŭ se tio estas via tre unua alvoko al fgetc 130 00:06:22,079 --> 00:06:23,870 por aparta dosiero, la unuan karakteron. 131 00:06:23,870 --> 00:06:26,210 Sed tuj poste, vi havos la venonta unu, 132 00:06:26,210 --> 00:06:31,500 la tre proksima karaktero de tiu dosiero, kaj provizas ĝin en karaktero variablo. 133 00:06:31,500 --> 00:06:34,490 Kiel ni faris tie, char ch egalas fgetc, 134 00:06:34,490 --> 00:06:36,389 En la nomo de dosiero puntero. 135 00:06:36,389 --> 00:06:38,180 Denove, ĝi estas tre grava tie memori 136 00:06:38,180 --> 00:06:41,430 ke por havi tiu operacio sukcesos, 137 00:06:41,430 --> 00:06:45,690 la dosiera montrilo mem must've estis malfermita por legado. 138 00:06:45,690 --> 00:06:50,589 Ni ne povas legi karakteron de dosiero montrilo ni malfermis por skribado. 139 00:06:50,589 --> 00:06:52,630 Do jen unu el la limigoj de fopen, dekstra? 140 00:06:52,630 --> 00:06:55,470 Ni devas limigi nin al nur elfaranta 141 00:06:55,470 --> 00:06:57,710 unu operacio kun unu dosiero puntero. 142 00:06:57,710 --> 00:07:00,220 Se ni volis legi kaj skribi de la sama dosiero, 143 00:07:00,220 --> 00:07:03,840 ni havus malfermitaj du apartaj dosiero punteros al la sama file-- 144 00:07:03,840 --> 00:07:05,670 unu por legado: unu por skribado. 145 00:07:05,670 --> 00:07:08,400 >> Do denove, la sola kialo Mi alportos ke ĝis nun estas 146 00:07:08,400 --> 00:07:11,920 ĉar se ni tuj faros alvokon al fgetc, ke dosiero puntero must've 147 00:07:11,920 --> 00:07:14,172 estis malfermita por legado. 148 00:07:14,172 --> 00:07:15,880 Kaj tiam bela simple, ĉiuj ni devas fari 149 00:07:15,880 --> 00:07:17,546 estas pasi en la nomo de la dosiero puntero. 150 00:07:17,546 --> 00:07:21,060 Do char ch egalas fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> Tio tuj akiri nin la sekva character-- 152 00:07:23,200 --> 00:07:25,575 aŭ denove, se tiu ĉi estas la unua tempo ni faris ĉi tiun alvokon, 153 00:07:25,575 --> 00:07:29,750 la unua character-- sendistinge dosiero almontras ptr1. 154 00:07:29,750 --> 00:07:32,210 Memoru ke tiu estis dosier 1 skalara tekston. 155 00:07:32,210 --> 00:07:36,490 Ĝi ricevos la unuan karakteron de tiu kaj ni konservas ĝin en la variablo ch. 156 00:07:36,490 --> 00:07:37,941 Bela simpla. 157 00:07:37,941 --> 00:07:40,190 Do ni nur rigardis tri funkcioj kaj jam ni 158 00:07:40,190 --> 00:07:43,070 povas fari ion senmanka. 159 00:07:43,070 --> 00:07:46,320 >> Do se ni prenas ĉi kapablo de duumaj karaktero 160 00:07:46,320 --> 00:07:48,943 kaj ni buklo it-- tiel ni daŭrigi akiri karakteroj 161 00:07:48,943 --> 00:07:51,390 el dosiero super kaj super kaj over-- nun ni 162 00:07:51,390 --> 00:07:54,500 povas legi ĉiun karakteron de dosiero. 163 00:07:54,500 --> 00:07:58,670 Kaj se ni presi ĉiu karaktero Tuj post ni legis ĝin, 164 00:07:58,670 --> 00:08:01,960 ni nun legi de dosiero kaj presita ĝian enhavon al la ekrano. 165 00:08:01,960 --> 00:08:05,610 Ni efike kroĉitaj ke dosiero sur la ekrano. 166 00:08:05,610 --> 00:08:09,670 Kaj tio estas kion la Linuksa komando kato faras. 167 00:08:09,670 --> 00:08:13,250 >> Se vi tajpas kato en la dosiernomo, ĝi presos la tutan enhavon 168 00:08:13,250 --> 00:08:15,160 de la dosiero en via fina fenestro. 169 00:08:15,160 --> 00:08:19,010 Kaj tiel ĉi tiu malgranda buklo tie, nur tri linioj de kodo, 170 00:08:19,010 --> 00:08:23,270 sed efike duobligas la Linuksa komando kato. 171 00:08:23,270 --> 00:08:25,210 Do tiu sintakso eble aspektas iom stranga, 172 00:08:25,210 --> 00:08:26,670 sed jen kio okazas tie. 173 00:08:26,670 --> 00:08:31,460 Dum ch egalas fgetc, ptr estas ne egala al EOF-- estas tuta buŝplenon, 174 00:08:31,460 --> 00:08:34,669 sed ni rompas ĝin malsupren ĵus do ĝi estas klara en la sintakso. 175 00:08:34,669 --> 00:08:37,169 Mi jam solidigis pro spacaj, 176 00:08:37,169 --> 00:08:39,049 kvankam ĝi estas iom sintakse malfacila. 177 00:08:39,049 --> 00:08:41,194 >> Do tiu parto verde dekstra nun, kion ĝi faras? 178 00:08:41,194 --> 00:08:42,860 Nu, tio estas nur nia fgetc alvokon, ĉu ne? 179 00:08:42,860 --> 00:08:44,530 Ni vidis ke antaŭe. 180 00:08:44,530 --> 00:08:49,500 Ĝi estas sukcesante karaktero de la dosiero. 181 00:08:49,500 --> 00:08:53,220 Poste ni komparos kiuj karakteron kontraŭ EOF. 182 00:08:53,220 --> 00:08:57,470 EOF estas speciala valoro kiu estas difinita en norma io.h, kiu 183 00:08:57,470 --> 00:08:59,390 estas la fino de dosiero karaktero. 184 00:08:59,390 --> 00:09:03,450 Do esence kio okazos Estas ĉi buklo legos karakteron, 185 00:09:03,450 --> 00:09:07,445 kompari ĝin al EOF, La fino de dosiero karaktero. 186 00:09:07,445 --> 00:09:10,070 Se ili ne egalas, do ni havas ne atingis la finon de la dosiero, 187 00:09:10,070 --> 00:09:11,490 ni devos presi tiu karaktero eksteren. 188 00:09:11,490 --> 00:09:13,740 Tiam ni reiros al la komencante de la buklo denove. 189 00:09:13,740 --> 00:09:18,310 Ni akiros karakteron, kontroli kontraŭ EOF, presas ĝin kaj tiel plu 190 00:09:18,310 --> 00:09:21,094 kaj tiel plu kaj tiel plu, looping tra tiamaniere 191 00:09:21,094 --> 00:09:22,760 ĝis ni atingis la finon de la dosiero. 192 00:09:22,760 --> 00:09:24,593 Kaj tiam de tiu punkto, ni estos presita 193 00:09:24,593 --> 00:09:26,210 el la tuta enhavo de la dosiero. 194 00:09:26,210 --> 00:09:29,450 Do denove, ni nur vidis fopen, fclose kaj fgetc 195 00:09:29,450 --> 00:09:34,950 kaj jam ni povas duobligi Linuksa terminalo komando. 196 00:09:34,950 --> 00:09:38,850 >> Kiel mi diris komence, ni havis fgetc kaj fputc, 197 00:09:38,850 --> 00:09:41,860 kaj fputc estis la kompano funkcio de fgetc. 198 00:09:41,860 --> 00:09:44,880 Kaj do, kiel vi povus imagi, ĝi estas la skribo ekvivalento. 199 00:09:44,880 --> 00:09:49,440 Ĝi permesas nin verki sola karaktero al dosiero. 200 00:09:49,440 --> 00:09:53,290 >> Denove, la averto esti, nur kiel estis kun fgetc, la dosiero 201 00:09:53,290 --> 00:09:56,660 ke ni skribas al must've estis malfermis por skribi aŭ por appending. 202 00:09:56,660 --> 00:10:00,820 Se ni provas kaj uzas fputc sur dosiero ke ni malfermis por legi, 203 00:10:00,820 --> 00:10:02,760 ni tuj suferos iom de eraro. 204 00:10:02,760 --> 00:10:04,440 Sed la alvoko estas sufiĉe simpla. 205 00:10:04,440 --> 00:10:08,000 fputc ĉefurbo A ptr2, ĉiuj tio tuj fari estas ĝi estas 206 00:10:08,000 --> 00:10:12,040 tuj skribos la leteron en A enen dosiero 2 skalara 207 00:10:12,040 --> 00:10:14,760 teksto, kiu estis la nomo de la file ni malfermis kaj asignita 208 00:10:14,760 --> 00:10:17,280 la montrilon al ptr2. 209 00:10:17,280 --> 00:10:20,430 Do ni tuj skribos ĉefurbo A al file 2 skalara tekston. 210 00:10:20,430 --> 00:10:24,592 Kaj ni skribas ekkrion atentigi arkivi 3 skalara 211 00:10:24,592 --> 00:10:27,330 teksto, kiu estis almontras ptr3. 212 00:10:27,330 --> 00:10:29,730 Do denove, bela simpla tie. 213 00:10:29,730 --> 00:10:32,727 >> Sed nun ni povas fari alian aferon. 214 00:10:32,727 --> 00:10:34,560 Ni havas tiun ekzemplon ni nur tuj super 215 00:10:34,560 --> 00:10:38,950 pri povante reprodukti la kato Linuksa komando, kiu presas el 216 00:10:38,950 --> 00:10:40,500 al la ekrano. 217 00:10:40,500 --> 00:10:43,510 Nu, Nun ke ni havas la kapablon legi karakterojn de dosieroj 218 00:10:43,510 --> 00:10:46,590 kaj skribi karakterojn al dosieroj, kial ni ne simple anstataŭigi ke 219 00:10:46,590 --> 00:10:50,720 voki al printf kun alvoko al fputc. 220 00:10:50,720 --> 00:10:54,090 >> Kaj nun ni duobligita cp, tre bazajn Linukso komando 221 00:10:54,090 --> 00:10:59,100 ke ni parolis pri vojo longa antaŭe en la Linuksa komandas video. 222 00:10:59,100 --> 00:11:01,070 Ni jam efike duobligita ke ĝuste ĉi tie. 223 00:11:01,070 --> 00:11:04,790 Ni legas karakteron kaj tiam ni skribante ke karaktero al alia dosiero. 224 00:11:04,790 --> 00:11:07,660 Legante de unu dosiero, skribo al alia, denove kaj denove 225 00:11:07,660 --> 00:11:11,350 kaj denove ĝis ni trafis EOF. 226 00:11:11,350 --> 00:11:14,250 Ni havas al la fino de la file ni provas kopii el. 227 00:11:14,250 --> 00:11:18,500 Kaj per tio ni skribis cxiujn de la karakteroj ni bezonas la dosieron 228 00:11:18,500 --> 00:11:19,500 ke ni skribas al. 229 00:11:19,500 --> 00:11:24,270 Do tiu estas cp, la Linukso kopion komando. 230 00:11:24,270 --> 00:11:26,550 >> Ĉe la komenco mem de tiu video, Mi havis la avertrimarko 231 00:11:26,550 --> 00:11:29,840 ke ni parolu iomete pri punteros. 232 00:11:29,840 --> 00:11:32,480 Jen specife kie ni estas tuj parolos pri punteros 233 00:11:32,480 --> 00:11:34,800 aldone al dosiero punteros. 234 00:11:34,800 --> 00:11:37,870 Do tiu funkcio similas kiel timiga. 235 00:11:37,870 --> 00:11:39,120 Oni alvenis pluraj parametroj. 236 00:11:39,120 --> 00:11:40,430 Estas multe okazas tie. 237 00:11:40,430 --> 00:11:42,760 Ekzistas multe da malsamaj koloroj kaj tekstoj. 238 00:11:42,760 --> 00:11:47,100 Sed vere, estas nur la generic versio de fgetc 239 00:11:47,100 --> 00:11:50,110 kiu nin permesas akiri ajnan kvanto de informo. 240 00:11:50,110 --> 00:11:53,560 Ĝi povas esti iom ineficiente se ni estas ricevas signojn unuope, 241 00:11:53,560 --> 00:11:55,770 ripetanta tra la dosieron unu signo samtempe. 242 00:11:55,770 --> 00:12:00,230 Ĉu ne estus pli agrable ricevi 100 unuope aŭ 500 samtempe? 243 00:12:00,230 --> 00:12:03,250 >> Nu, Fread kaj lia kunulo funkcio fwrite, kiuj ni parolos pri 244 00:12:03,250 --> 00:12:05,490 en dua, nin permesas fari ĝuste tion. 245 00:12:05,490 --> 00:12:08,480 Ni povas legi arbitran kvanton de informoj el dosiero 246 00:12:08,480 --> 00:12:10,290 kaj ni konservas ĝin ie temporalmente. 247 00:12:10,290 --> 00:12:12,980 Anstataŭ estanta kapabla nur persvadi ŝin en sola variablo, 248 00:12:12,980 --> 00:12:15,790 ni eble bezonas por stoki ĝin en tabelo. 249 00:12:15,790 --> 00:12:19,980 Kaj tiel, ni pasas en kvar argumentoj por fread-- montrilo 250 00:12:19,980 --> 00:12:23,940 al la loko kie ni estas tuj stoki informo, 251 00:12:23,940 --> 00:12:29,180 kiom granda ĉiu unuo de informo Estos, kiom da unuoj de informo 252 00:12:29,180 --> 00:12:35,192 ni volas akiri, kaj el kiun dosieron oni volas ricevi ilin. 253 00:12:35,192 --> 00:12:37,150 Verŝajne plej ilustrita kun ekzemplo tie. 254 00:12:37,150 --> 00:12:41,640 Do diru ke ni deklaras tabelo de 10 entjeroj. 255 00:12:41,640 --> 00:12:45,080 Ni ĵus deklaris sur la pilo arbitre int arr 10. 256 00:12:45,080 --> 00:12:46,970 Do jen bela simpla. 257 00:12:46,970 --> 00:12:51,970 Nun kion ni faras tamen estas la frecall estas ni legas grandeco de int 258 00:12:51,970 --> 00:12:54,180 fojoj 10 bajtoj de informo. 259 00:12:54,180 --> 00:12:59,040 Grandeco de int estaĵo four-- tio la grandeco de entjero en c. 260 00:12:59,040 --> 00:13:02,790 >> Do kion ni faras estas ni legas 40 bitokoj valoro de informo 261 00:13:02,790 --> 00:13:05,850 de la dosiero almontras ptr. 262 00:13:05,850 --> 00:13:08,600 Kaj ni stokante tiuj 40 bajtoj ie 263 00:13:08,600 --> 00:13:12,080 kie ni flankenmetis 40 bitokoj valoro de memoro. 264 00:13:12,080 --> 00:13:15,970 Feliĉe, ni jam faris tion per deklarante arr, ke tabelo dekstra tie. 265 00:13:15,970 --> 00:13:19,770 Kiu estas kapabla je posedo 10 kvar-bajto unuoj. 266 00:13:19,770 --> 00:13:22,860 Do entute, ĝi povas teni 40 bitokoj valoro de informo. 267 00:13:22,860 --> 00:13:26,540 Kaj ni estas nun leganta 40 bajtoj de informoj el la dosiero, 268 00:13:26,540 --> 00:13:30,330 kaj ni stokante ĝin en arr. 269 00:13:30,330 --> 00:13:35,470 >> Memoras de la video sur punteros kiu la nomo de tabelo, kiel arr, 270 00:13:35,470 --> 00:13:38,370 Estas vere nur montrilon al ĝia unua elemento. 271 00:13:38,370 --> 00:13:43,680 Do kiam ni pasas en arr tie, ni estas, fakte, pasante en puntero. 272 00:13:43,680 --> 00:13:46,120 >> Simile ni povas fari this-- ni ne nepre 273 00:13:46,120 --> 00:13:51,200 bezonas savi nian bufro sur la stako. 274 00:13:51,200 --> 00:13:54,990 Ni povus ankaŭ dinamike asigni buffer ŝatas tion, uzante malloc. 275 00:13:54,990 --> 00:13:57,340 Memoru, kiam ni dinamike rezervi memoron, 276 00:13:57,340 --> 00:14:00,550 ni savanta ĝin sur la amaso, ne la pilo. 277 00:14:00,550 --> 00:14:02,110 Sed estas ankoraŭ buffer. 278 00:14:02,110 --> 00:14:06,810 >> Ĝi ankoraŭ, en tiu kazo, estas tenante 640 bajtoj de informo 279 00:14:06,810 --> 00:14:09,230 ĉar duoblan dissxutas ok bajtoj. 280 00:14:09,230 --> 00:14:11,570 Kaj ni petas por 80 el ili. 281 00:14:11,570 --> 00:14:13,770 Ni volas havi spaco teni 80 duobloj. 282 00:14:13,770 --> 00:14:17,210 Do 80 fojojn 8 estas 640 bajtoj informo. 283 00:14:17,210 --> 00:14:21,880 Kaj ke alvoko al Fread estas kolekti 640 bajtoj de informo 284 00:14:21,880 --> 00:14:27,770 de la dosiero almontras ptr kaj stokante ĝin nun en arr2. 285 00:14:27,770 --> 00:14:32,770 >> Nun ni povas ankaŭ trakti Fread nur kiel alvoko al fgetc. 286 00:14:32,770 --> 00:14:37,140 En tiu kazo, ni nur provas akiri unu signo de la dosiero. 287 00:14:37,140 --> 00:14:40,070 Kaj ni ne bezonas tabelo teni karaktero. 288 00:14:40,070 --> 00:14:43,170 Ni povas nur stoki ĝin en gravulo variablo. 289 00:14:43,170 --> 00:14:46,390 >> La kaptaĵo, tamen, estas ke kiam ni nur havas variablo, 290 00:14:46,390 --> 00:14:50,290 ni bezonas por pasi en la adreso de tiu variablo 291 00:14:50,290 --> 00:14:52,550 ĉar revokon ke la unua argumento al Fread 292 00:14:52,550 --> 00:14:59,210 estas puntero al la localización kaj memoro kie ni volas konservi la informon. 293 00:14:59,210 --> 00:15:01,550 Denove, la nomon de tabelo estas puntero. 294 00:15:01,550 --> 00:15:04,200 Do ni ne bezonas fari ampersand tabelo. 295 00:15:04,200 --> 00:15:07,270 Sed c, la signon c tie, ne estas tabelo. 296 00:15:07,270 --> 00:15:08,390 Estas nur variablo. 297 00:15:08,390 --> 00:15:11,840 Kaj tial ni devas pasi ampersand c por indiki 298 00:15:11,840 --> 00:15:15,350 ke jen la adreso kie ni volas stoki ĉi unu bajto de informoj, 299 00:15:15,350 --> 00:15:20,479 ĉi tiu karaktero ke ni kolektado de ptr. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- mi iros tra ĉi iom pli 301 00:15:22,270 --> 00:15:25,440 quickly-- estas preskaux la ekzakta ekvivalento de Fread 302 00:15:25,440 --> 00:15:27,720 krom ĝi estas por skribado anstataŭe de legado, nur 303 00:15:27,720 --> 00:15:31,610 kiel la alia lando ni havis malfermita kaj proksima, akiri karaktero, 304 00:15:31,610 --> 00:15:32,530 Skribi karaktero. 305 00:15:32,530 --> 00:15:35,040 Nun estas akiri arbitran kvanto de informo, 306 00:15:35,040 --> 00:15:37,170 dekstra arbitra kvanto de informo. 307 00:15:37,170 --> 00:15:39,790 Do ĝuste kiel antaŭe, ni povas havas aron de 10 entjeroj 308 00:15:39,790 --> 00:15:43,210 kie ni jam havas informo stokita, eble. 309 00:15:43,210 --> 00:15:46,580 >> Ĝi estis verŝajne kelkaj linioj de kodo kiuj devus iri inter tiuj du 310 00:15:46,580 --> 00:15:49,990 Kie mi plenigos arr kun io signfa. 311 00:15:49,990 --> 00:15:51,880 Mi plenigos ĝin per 10 malsamaj entjeroj. 312 00:15:51,880 --> 00:15:54,920 Kaj anstataŭe, kio mi estas faras estas skribanta de arr 313 00:15:54,920 --> 00:15:58,600 kaj kunigis informojn de arr. 314 00:15:58,600 --> 00:16:02,390 Kaj mi prenas tiun informon kaj metante ĝin en la dosiero. 315 00:16:02,390 --> 00:16:05,410 >> Do anstataŭe de ĝi estante el la dosieron al la bufro, 316 00:16:05,410 --> 00:16:08,790 ni nun irante de la bufro al la dosiero. 317 00:16:08,790 --> 00:16:10,580 Do estas nur la dorsflanko. 318 00:16:10,580 --> 00:16:16,680 Do denove, samkiel antaŭe, ni povas ankaŭ havas amaso bloko de memoro 319 00:16:16,680 --> 00:16:19,600 ke ni dinamike asignitaj kaj legis el tiu 320 00:16:19,600 --> 00:16:21,570 kaj skribu ke por la dosiero. 321 00:16:21,570 --> 00:16:24,900 >> Kaj ni ankaŭ havas ununuran variablon kapablas tenante unu bajto 322 00:16:24,900 --> 00:16:27,200 de informoj, kiel ekzemple karaktero. 323 00:16:27,200 --> 00:16:29,830 Sed denove, ni devas pasi en la adreso de tiu variablo 324 00:16:29,830 --> 00:16:31,840 kiam ni volas legi gxin. 325 00:16:31,840 --> 00:16:35,280 Do ni povas skribi la informojn ni trovas en tiu adreso 326 00:16:35,280 --> 00:16:39,050 al la dosiero pointer, PTR. 327 00:16:39,050 --> 00:16:41,630 >> Ekzistas multaj aliaj granda dosiero / S funkcioj 328 00:16:41,630 --> 00:16:44,650 ke fari diversajn aferojn krom la ones ni parolis hodiaŭ. 329 00:16:44,650 --> 00:16:46,450 Paro de la ones vi eble trovos utila 330 00:16:46,450 --> 00:16:50,840 estas fgets kaj fputs, kiu estas la ekvivalenta 331 00:16:50,840 --> 00:16:56,190 de fgetc kaj fputc sed por legi sola kordo de dosiero. 332 00:16:56,190 --> 00:16:59,020 Anstataŭe de ununura karaktero, ĝi legos tutan ĉenon. 333 00:16:59,020 --> 00:17:02,940 fprintf, kiu esence permesas vi uzi printf skribi al dosiero. 334 00:17:02,940 --> 00:17:05,619 Do kiel vi povas fari la ŝanĝiĝema anstataŭo uzante 335 00:17:05,619 --> 00:17:09,900 la anstataŭiloj procentoj i kaj procento d, kaj tiel plu, kun printf 336 00:17:09,900 --> 00:17:14,690 Vi povas simile prenas la printf kordo kaj presaĵo ion 337 00:17:14,690 --> 00:17:16,800 kiel tiu al dosiero. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- se vi havas DVD ludanto estas la analogio mi kutime uzas here-- 339 00:17:20,720 --> 00:17:23,109 Estas ia kiel uzi vian malantaŭenigi kaj rapida antaŭen 340 00:17:23,109 --> 00:17:25,819 butonoj movi ĉirkaŭ la filmo. 341 00:17:25,819 --> 00:17:28,369 Simile, vi povas movi la dosieron. 342 00:17:28,369 --> 00:17:30,250 Unu el la aĵoj interne ke dosiero strukturo 343 00:17:30,250 --> 00:17:34,270 ke c kreas por vi estas indikilo de kie vi estas en la dosiero. 344 00:17:34,270 --> 00:17:36,420 Ĉu vi ĉe la tre komencante, je bajto nulo? 345 00:17:36,420 --> 00:17:39,290 Ĉu vi en bajto 100, bajto 1.000, kaj tiel plu? 346 00:17:39,290 --> 00:17:44,340 Vi povas uzi fseek arbitre movas ke indikilo antaŭen aŭ malantaŭen. 347 00:17:44,340 --> 00:17:46,744 >> Kaj ftell, denove simila al DVD ludanto, 348 00:17:46,744 --> 00:17:49,660 Estas kiel malgranda horloĝo kiu rakontas vi kiom da minutoj kaj sekundoj vi 349 00:17:49,660 --> 00:17:52,480 estas en aparta filmo. 350 00:17:52,480 --> 00:17:56,990 Simile, ftell diras vin kiel da bitokoj vi estas en la dosiero. 351 00:17:56,990 --> 00:18:00,210 feof estas malsama versio de eltrovanta ĉu vi havas 352 00:18:00,210 --> 00:18:01,700 atingis la finon de la dosiero. 353 00:18:01,700 --> 00:18:03,600 Kaj ferror estas funkcio ke vi povas uzi 354 00:18:03,600 --> 00:18:06,959 eltrovi ĉu io devas fuŝiĝis laborista kun dosiero. 355 00:18:06,959 --> 00:18:08,750 Denove, tio estas nur gratante la surfaco. 356 00:18:08,750 --> 00:18:12,730 Restas multa pli dosiero / S funkciojn en la norma io.h. 357 00:18:12,730 --> 00:18:16,620 Sed ĉi tio verŝajne akiri vin eklaboris kun dosiero punteros. 358 00:18:16,620 --> 00:18:17,640 Mi Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 Jen CS50. 360 00:18:19,750 --> 00:18:21,669