1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> Говорник: Досега, тоа е веројатно дека повеќето од вашите програми 3 00:00:07,870 --> 00:00:10,170 биле малку ефемерни. 4 00:00:10,170 --> 00:00:13,310 Ќе ја стартувате програмата како Марио или алчна. 5 00:00:13,310 --> 00:00:17,350 Тоа прави нешто, што можеби и го поттикнува на корисникот за некои информации, 6 00:00:17,350 --> 00:00:20,400 печати некои излез на екран, но потоа, кога вашата програма е готово, 7 00:00:20,400 --> 00:00:23,252 има навистина нема докази постојат тоа беше некогаш работат во на прво место. 8 00:00:23,252 --> 00:00:25,960 Мислам, сигурни, можеби ќе го напуштиле отворете го во терминален прозорец, 9 00:00:25,960 --> 00:00:29,770 но ако го исчистите вашиот екран, има навистина нема докази дека тоа постои. 10 00:00:29,770 --> 00:00:33,720 Ние немаме место за складирање упорни информации, информации 11 00:00:33,720 --> 00:00:36,890 која постои по нашето програма престана да работи, 12 00:00:36,890 --> 00:00:39,241 или не сме се до оваа точка. 13 00:00:39,241 --> 00:00:41,490 За среќа иако, в прави да ни обезбеди со способноста 14 00:00:41,490 --> 00:00:44,220 да го направите ова со спроведување нешто што се нарекува 15 00:00:44,220 --> 00:00:48,330 датотека, структура која во основа претставува датотека која ќе се удвои 16 00:00:48,330 --> 00:00:53,826 кликнете на вашиот компјутер, ако сте користи за да се графички кориснички средина. 17 00:00:53,826 --> 00:00:55,700 Општо земено, кога работат со в, ние сме всушност 18 00:00:55,700 --> 00:00:59,965 случува да се работи со покажувачи да files-- датотека stars-- 19 00:00:59,965 --> 00:01:02,090 освен за малку кога зборуваме за неколку 20 00:01:02,090 --> 00:01:04,560 од функциите кои работат со датотека покажувачи. 21 00:01:04,560 --> 00:01:08,990 Вие не треба да имаат навистина ископани премногу длабоко во разбирањето покажувачи 22 00:01:08,990 --> 00:01:09,730 себе. 23 00:01:09,730 --> 00:01:12,870 Има мала teeny малку каде што ние ќе зборуваме за нив, 24 00:01:12,870 --> 00:01:18,090 но генерално датотека покажувачи и покажувачи, а меѓусебно поврзани, 25 00:01:18,090 --> 00:01:20,290 не се иста работа. 26 00:01:20,290 --> 00:01:22,440 >> Сега што мислам кога Велам упорни податоци? 27 00:01:22,440 --> 00:01:23,650 Што е упорни податоци? 28 00:01:23,650 --> 00:01:25,232 Зошто ни е гајле за тоа? 29 00:01:25,232 --> 00:01:27,190 Речеме, на пример, дека сте водење на програма 30 00:01:27,190 --> 00:01:29,850 или сте се препишува на програма која е игра, 31 00:01:29,850 --> 00:01:32,960 а вие сакате да ги пратите на сите потези на корисникот 32 00:01:32,960 --> 00:01:36,620 така што можеби ако нешто тргне наопаку, можете да ги видиш датотека по натпреварот. 33 00:01:36,620 --> 00:01:39,970 Тоа е она што мислиме кога зборува за упорни податоци. 34 00:01:39,970 --> 00:01:43,930 >> Во текот на извршувањето на вашиот програма, на датотеката е создадена. 35 00:01:43,930 --> 00:01:45,680 И кога вашата програма престана да работи, 36 00:01:45,680 --> 00:01:48,689 таа датотека се уште постои на вашиот систем. 37 00:01:48,689 --> 00:01:50,230 И ние може да се погледне во него и да го испита. 38 00:01:50,230 --> 00:01:53,670 И така што програмата ќе биде поставено на направивме некои упорни податоци, 39 00:01:53,670 --> 00:01:57,390 постојат податоци по завршување на програмата заврши трчање. 40 00:01:57,390 --> 00:02:02,320 >> Сега сите овие функции кои работат со создавање на датотеки и манипулирање 41 00:02:02,320 --> 00:02:04,940 нив на различни начини живеат во стандард io.h, 42 00:02:04,940 --> 00:02:08,210 која е насловот датотека која сте најверојатно бил фунта 43 00:02:08,210 --> 00:02:10,910 вклучувајќи и на врвот на прилично многу на сите ваши програми 44 00:02:10,910 --> 00:02:14,130 поради тоа што содржи еден од повеќето корисни функции за нас, 45 00:02:14,130 --> 00:02:16,130 printf, кои, исто така, им овозможува на живее во стандард io.h. 46 00:02:16,130 --> 00:02:20,400 Значи, вие не треба да фунта вклучуваат сите дополнителни датотеки веројатно 47 00:02:20,400 --> 00:02:23,540 со цел да се работи со датотека покажувачи. 48 00:02:23,540 --> 00:02:29,980 >> Сега секоја функција датотеката покажувач, или секоја датотека I / O, влез излез 49 00:02:29,980 --> 00:02:33,310 функција, го прифаќа како една на неговите параметри или влезови 50 00:02:33,310 --> 00:02:35,822 датотека pointer-- освен за еден, fopen, која 51 00:02:35,822 --> 00:02:38,280 е она што го користите за да добиете датотека покажувачот на прво место. 52 00:02:38,280 --> 00:02:41,010 Но откако сте го отвори поднесе и ќе го добиете датотека покажувачи, 53 00:02:41,010 --> 00:02:43,510 тогаш може да ги помине како аргументи за различните функции 54 00:02:43,510 --> 00:02:46,720 ние ќе треба да се зборува за Денес, како и многу други 55 00:02:46,720 --> 00:02:48,520 така што ќе можат да работат со датотеки. 56 00:02:48,520 --> 00:02:50,980 >> Па така постојат шест прилично заеднички основни оние 57 00:02:50,980 --> 00:02:52,870 дека ние ќе треба да се зборува за денес. 58 00:02:52,870 --> 00:02:57,160 fopen и нејзиниот придружник функција запишам, fgetc 59 00:02:57,160 --> 00:03:02,670 и нејзиниот придружник функција fputc, и fread и нејзиниот придружник функција, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Значи, да се добие право во неа. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- она ​​што не го прави тоа? 63 00:03:07,050 --> 00:03:10,050 Па, тоа се отвора на датотеки и да ви дава датотеката покажувач на него, 64 00:03:10,050 --> 00:03:14,000 така што тогаш можете да го користите дека датотеката покажувач како аргумент 65 00:03:14,000 --> 00:03:16,730 со некој од друга датотека I / O функции. 66 00:03:16,730 --> 00:03:19,100 Најважно да се сеќавам со fopen 67 00:03:19,100 --> 00:03:24,222 е дека откако ќе се отвори се поднесе или да направи повик, како онаа тука, 68 00:03:24,222 --> 00:03:26,930 што треба да се провери да бидете сигурни што покажувачот што сте ја добиле назад 69 00:03:26,930 --> 00:03:28,320 не е еднаков на нула. 70 00:03:28,320 --> 00:03:31,320 Ако не сте го гледав видеото на покажувачи, ова не може да има смисла. 71 00:03:31,320 --> 00:03:35,639 Но ако се обидете и dereference нулти покажувач потсетиме, 72 00:03:35,639 --> 00:03:38,180 вашата програма најверојатно ќе страдаат сегментација [Беззвучен]. 73 00:03:38,180 --> 00:03:40,540 Ние сакаме да се осигураме дека можеме доби легитимен покажувачот назад. 74 00:03:40,540 --> 00:03:43,665 Поголемиот дел од времето ние ќе има добивано и легитимен покажувачот назад 75 00:03:43,665 --> 00:03:45,280 и тоа нема да биде проблем. 76 00:03:45,280 --> 00:03:46,760 >> Така како ние да се јавам во fopen? 77 00:03:46,760 --> 00:03:48,051 Тоа изгледа доста како тоа. 78 00:03:48,051 --> 00:03:52,690 Датотека ѕвезда ptr-- кон меморија е генеричко именува за датотеката pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 проаѓаат во две работи, на име на датотека и операција ние сакаме да ги преземе. 80 00:03:57,300 --> 00:04:01,690 Така што би можеле да имаат повик што личи this-- датотека ѕвезда кон меморија 1 еднаква fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 Како и работата што сте ја одбрале е р. 83 00:04:07,020 --> 00:04:08,639 >> Па што мислите r е тука? 84 00:04:08,639 --> 00:04:11,180 Кои се видови на работи кои сме Може да биде во можност да се направи за да се датотеки? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Така што r е работата што ние изберете кога ќе сакате да ја прочитате датотеката. 87 00:04:17,500 --> 00:04:20,260 Па ние би основа кога ние се направи повик вака 88 00:04:20,260 --> 00:04:25,440 се добива себе датотека покажувачот таква што тогаш би можеле да ги прочитате информациите 89 00:04:25,440 --> 00:04:27,770 од file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Слично на тоа, ние може да се отвори датотеката 2.txt за пишување и за да можеме да го помине ptr2, 91 00:04:34,190 --> 00:04:38,210 покажувачот на датотеката Јас направивме овде, како аргумент за било која функција што 92 00:04:38,210 --> 00:04:40,080 пишува информации во датотека. 93 00:04:40,080 --> 00:04:43,767 И слични на пишување, има Исто така има опција да се додаде, а. 94 00:04:43,767 --> 00:04:45,600 Разликата помеѓу пишување и дополнување 95 00:04:45,600 --> 00:04:50,920 е во тоа што кога ќе се запишам во датотеката, ако се направи повик до fopen за пишување 96 00:04:50,920 --> 00:04:54,761 и таа датотека веќе постои, тоа е ќе ги избрише целата датотека. 97 00:04:54,761 --> 00:04:56,510 Тоа се случува да се започне на самиот почеток, 98 00:04:56,510 --> 00:04:58,820 бришење на сите информации тоа е веќе таму. 99 00:04:58,820 --> 00:05:02,210 >> А ако го отвори за дополнување, тоа ќе оди на крајот на датотеката 100 00:05:02,210 --> 00:05:04,340 ако има веќе текст во тоа и информации во него, 101 00:05:04,340 --> 00:05:06,040 и тогаш ќе почне пишување од таму. 102 00:05:06,040 --> 00:05:08,570 Така да нема да изгуби било на информациите што сте правеле. 103 00:05:08,570 --> 00:05:12,110 Без разлика дали сакате да се напише или додавај вид зависи од ситуацијата. 104 00:05:12,110 --> 00:05:16,840 Но најверојатно ќе знаат за што право работа е кога ќе дојде време. 105 00:05:16,840 --> 00:05:18,020 Значи тоа е fopen. 106 00:05:18,020 --> 00:05:18,930 >> Што е со запишам? 107 00:05:18,930 --> 00:05:21,600 Па, доста едноставно, запишам само прифаќа покажувачот на датотеката. 108 00:05:21,600 --> 00:05:24,000 И како што би очекувале, го затвора таа датотека. 109 00:05:24,000 --> 00:05:29,270 И еднаш сме затворени датотека, не можеме, вршење на повеќе датотеки на I / O функции, 110 00:05:29,270 --> 00:05:31,420 читање или пишување, на таа датотека. 111 00:05:31,420 --> 00:05:36,444 Ние треба да повторно да се отвори поднесе уште време, со цел 112 00:05:36,444 --> 00:05:38,610 да продолжи да работи со го користите функциите на I / O. 113 00:05:38,610 --> 00:05:41,520 Па запишам значи дека ние сме направиле работа со оваа податотека. 114 00:05:41,520 --> 00:05:44,690 И сите ние треба да помине во е името на датотеката покажувач. 115 00:05:44,690 --> 00:05:50,010 Па на неколку слајдови одамна, ние fopened датотека 1 точка текст за читање 116 00:05:50,010 --> 00:05:52,854 а ние се доделени од кои датотека покажувач на ptr1. 117 00:05:52,854 --> 00:05:55,020 Сега ние одлучивме ние сме направи читањето на таа датотека. 118 00:05:55,020 --> 00:05:56,561 Ние не треба да правите со него. 119 00:05:56,561 --> 00:05:58,890 Можеме само да запишам ptr1. 120 00:05:58,890 --> 00:06:01,950 И слично, дали е запишам еден од нив. 121 00:06:01,950 --> 00:06:02,450 Во ред. 122 00:06:02,450 --> 00:06:03,700 Значи тоа е отворање и затворање. 123 00:06:03,700 --> 00:06:05,780 Тоа се двете основни почнувајќи операции. 124 00:06:05,780 --> 00:06:08,050 >> Сега сакаме да се, всушност, направи некои интересни работи, 125 00:06:08,050 --> 00:06:11,940 и првата функција дека ќе се види дека ќе го направат тоа е fgetc-- 126 00:06:11,940 --> 00:06:14,110 поднесе добие карактер. 127 00:06:14,110 --> 00:06:17,350 Тоа е она што генерално fgetc ќе се претвори во. 128 00:06:17,350 --> 00:06:20,190 Неговата цел во животот е да прочитате следните карактер, 129 00:06:20,190 --> 00:06:22,079 или ако ова е вашата Првиот повик за fgetc 130 00:06:22,079 --> 00:06:23,870 за одредена датотека, првиот карактер. 131 00:06:23,870 --> 00:06:26,210 Но, тогаш, по што, ќе го добиете на следниот, 132 00:06:26,210 --> 00:06:31,500 веќе следниот карактер на оваа датотека, и продавници во променлив карактер. 133 00:06:31,500 --> 00:06:34,490 Како што ние го направивме овде, знак гл еднаква fgetc, 134 00:06:34,490 --> 00:06:36,389 помине во името на датотека што го покажувачот. 135 00:06:36,389 --> 00:06:38,180 Повторно, тоа е многу важно тука е да се запамети 136 00:06:38,180 --> 00:06:41,430 дека со цел да се има оваа операција да успее, 137 00:06:41,430 --> 00:06:45,690 самата покажувачот на датотеката Сигурно е отворена за читање. 138 00:06:45,690 --> 00:06:50,589 Ние не може да се чита карактер од датотека покажувачот дека ние отворена за пишување. 139 00:06:50,589 --> 00:06:52,630 Значи, тоа е една од ограничувањата на fopen, нели? 140 00:06:52,630 --> 00:06:55,470 Ние треба да го ограничи себеси само на извршување 141 00:06:55,470 --> 00:06:57,710 една работа со една датотека покажувач. 142 00:06:57,710 --> 00:07:00,220 Ако сакаме да се чита и да пишува од иста датотека, 143 00:07:00,220 --> 00:07:03,840 ќе имаме отворена две одделни датотека покажувачи на истиот file-- 144 00:07:03,840 --> 00:07:05,670 еден за читање, по еден за пишување. 145 00:07:05,670 --> 00:07:08,400 >> Значи, повторно, е единствената причина Носам дека до сега е 146 00:07:08,400 --> 00:07:11,920 затоа што ако ние се случува да се направи повик да fgetc, дека датотеката покажувач Сигурно 147 00:07:11,920 --> 00:07:14,172 е отворена за читање. 148 00:07:14,172 --> 00:07:15,880 А потоа прилично едноставно, сите ние треба да направите 149 00:07:15,880 --> 00:07:17,546 се помине во името на покажувачот на датотеката. 150 00:07:17,546 --> 00:07:21,060 Така знак гл еднаква fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> Што се случува да ни се следниот character-- 152 00:07:23,200 --> 00:07:25,575 или, повторно, ако ова е прв времето што е направен овој повик, 153 00:07:25,575 --> 00:07:29,750 првиот character-- на она што датотека е посочени од ptr1. 154 00:07:29,750 --> 00:07:32,210 Потсетиме дека тоа беше датотека 1 точка текст. 155 00:07:32,210 --> 00:07:36,490 Тоа ќе ја добие првата карактер на и ние ќе го сместат во променлива поглавје. 156 00:07:36,490 --> 00:07:37,941 Прилично јасна. 157 00:07:37,941 --> 00:07:40,190 Значи ние сме го погледне само три функции и веќе сме 158 00:07:40,190 --> 00:07:43,070 може да направи нешто прилично уредни. 159 00:07:43,070 --> 00:07:46,320 >> Ако се има оваа способност за добивање на знак 160 00:07:46,320 --> 00:07:48,943 и ние јамка it-- па ние продолжи да се ликови 161 00:07:48,943 --> 00:07:51,390 од датотека во текот и одново и over-- сега ние 162 00:07:51,390 --> 00:07:54,500 може да го прочитате секој карактер на датотека. 163 00:07:54,500 --> 00:07:58,670 И ако ние се печати секој лик веднаш откако ќе го прочита, 164 00:07:58,670 --> 00:08:01,960 ние сега читаат од датотека и печатени неговата содржина на екранот. 165 00:08:01,960 --> 00:08:05,610 Ние сме споени ефикасно таа датотека на екранот. 166 00:08:05,610 --> 00:08:09,670 И тоа е она што Linux команда мачка прави. 167 00:08:09,670 --> 00:08:13,250 >> Ако го напишете мачка во името на датотеката, таа ќе се печати ја целата содржина 168 00:08:13,250 --> 00:08:15,160 на датотеката во терминален прозорец вашата. 169 00:08:15,160 --> 00:08:19,010 И така ова малку јамка тука, само три линии на код, 170 00:08:19,010 --> 00:08:23,270 но ефикасно ја дуплира на Linux команда мачка. 171 00:08:23,270 --> 00:08:25,210 Па ова би можело синтакса изгледа малку чудно, 172 00:08:25,210 --> 00:08:26,670 но тука е она што се случува овде. 173 00:08:26,670 --> 00:08:31,460 А гл еднаква fgetc, кон меморија не е еднаква EOF-- тоа е целата залак, 174 00:08:31,460 --> 00:08:34,669 но ајде да се прекине само така што е јасно на синтаксата. 175 00:08:34,669 --> 00:08:37,169 Сум го консолидираше за доброто на просторот, 176 00:08:37,169 --> 00:08:39,049 иако тоа е малку синтаксички незгодно. 177 00:08:39,049 --> 00:08:41,194 >> Па овој дел во зелена право Сега, она што го прави тоа? 178 00:08:41,194 --> 00:08:42,860 Па, тоа е само нашата fgetc повик, нели? 179 00:08:42,860 --> 00:08:44,530 Видовме дека порано. 180 00:08:44,530 --> 00:08:49,500 Тоа е добивање на еден лик од датотека. 181 00:08:49,500 --> 00:08:53,220 Тогаш можеме да ги споредиме дека карактер против EOF. 182 00:08:53,220 --> 00:08:57,470 EOF е посебна вредност, која е дефинирана во стандард io.h, која 183 00:08:57,470 --> 00:08:59,390 е на крајот на датотеката карактер. 184 00:08:59,390 --> 00:09:03,450 Значи, во основа она што ќе се случи е овој циклус ќе ги чита некој знак, 185 00:09:03,450 --> 00:09:07,445 да се спореди со EOF, на крајот на датотеката карактер. 186 00:09:07,445 --> 00:09:10,070 Ако тие не се совпаѓаат, така што не треба стигна до крајот на датотеката, 187 00:09:10,070 --> 00:09:11,490 ние ќе се печати на тој карактер надвор. 188 00:09:11,490 --> 00:09:13,740 Потоа ќе се вратиме на почнувајќи од циклусот повторно. 189 00:09:13,740 --> 00:09:18,310 Ние ќе добие лик, проверете против EOF, печати ја надвор, и така натаму 190 00:09:18,310 --> 00:09:21,094 и така натаму и така натаму, looping преку, на тој начин 191 00:09:21,094 --> 00:09:22,760 додека не сте достигнавме крајот на датотеката. 192 00:09:22,760 --> 00:09:24,593 А потоа од страна на таа точка, ние ќе се печатени 193 00:09:24,593 --> 00:09:26,210 од целата содржина на досието. 194 00:09:26,210 --> 00:09:29,450 Значи, повторно, ние сме само гледа fopen, запишам, и fgetc 195 00:09:29,450 --> 00:09:34,950 и веќе може да се дуплираат терминал команда Линукс. 196 00:09:34,950 --> 00:09:38,850 >> Како што реков на почетокот, имавме fgetc и fputc, 197 00:09:38,850 --> 00:09:41,860 и fputc беше придружник функција на fgetc. 198 00:09:41,860 --> 00:09:44,880 И така, како што можете да си замислите, тоа е пишувањето еквивалентни. 199 00:09:44,880 --> 00:09:49,440 Тоа ни овозможува да се напише еден лик во датотека. 200 00:09:49,440 --> 00:09:53,290 >> Повторно, забелешката се, само како што беше со fgetc, на датотеката 201 00:09:53,290 --> 00:09:56,660 дека пишуваме за Сигурно е отвори за запишување или за дополнување. 202 00:09:56,660 --> 00:10:00,820 Ако се обидеме и да го користите fputc на датотека дека ние сме отворени за читање, 203 00:10:00,820 --> 00:10:02,760 ние ќе треба да страдаат малку грешка. 204 00:10:02,760 --> 00:10:04,440 Но на повикот е прилично едноставна. 205 00:10:04,440 --> 00:10:08,000 fputc капитал А ptr2, сите што се случува да се направи е тоа е 206 00:10:08,000 --> 00:10:12,040 Ќе пишувам писмо во А во датотека 2 точка 207 00:10:12,040 --> 00:10:14,760 текст, кој беше името на датотека која ја отворивме и се доделени 208 00:10:14,760 --> 00:10:17,280 на покажувачот ptr2. 209 00:10:17,280 --> 00:10:20,430 Па ние ќе треба да се напише капитал А да поднесе 2 точка текст. 210 00:10:20,430 --> 00:10:24,592 И ние ќе напише фантастичен укажуваат поднесе 3 точка 211 00:10:24,592 --> 00:10:27,330 текст, кој беше посочен од страна ptr3. 212 00:10:27,330 --> 00:10:29,730 Значи, повторно, прилично јасна тука. 213 00:10:29,730 --> 00:10:32,727 >> Но сега можеме да се направи нешто друго. 214 00:10:32,727 --> 00:10:34,560 Имаме овој пример бевме само одење во текот 215 00:10:34,560 --> 00:10:38,950 за да се биде во можност да реплицира на мачка Linux команда, онаа која отпечатоци од 216 00:10:38,950 --> 00:10:40,500 на екранот. 217 00:10:40,500 --> 00:10:43,510 Па, сега дека ние имаме способност да читаат знаците од датотеките 218 00:10:43,510 --> 00:10:46,590 и пишувате знаци на датотеки, зошто да не само што ја замени 219 00:10:46,590 --> 00:10:50,720 јавам да printf со повик до fputc. 220 00:10:50,720 --> 00:10:54,090 >> И сега имаме дупликат ЦП, многу основни команда Линукс 221 00:10:54,090 --> 00:10:59,100 кои ние разговаравме за пат долг пред во Линукс команди видео. 222 00:10:59,100 --> 00:11:01,070 Имаме ефикасно удвои дека токму тука. 223 00:11:01,070 --> 00:11:04,790 Ние читаш лик и потоа ние сме пишувајќи дека карактер во друга датотека. 224 00:11:04,790 --> 00:11:07,660 Читање од една датотека, пишување на друг, одново и одново 225 00:11:07,660 --> 00:11:11,350 и одново, додека ние хит EOF. 226 00:11:11,350 --> 00:11:14,250 Мораме да се на крајот на поднесе ние се обидуваме да ги копирате од. 227 00:11:14,250 --> 00:11:18,500 А со тоа и ние ќе го имаат напишано сите од ликовите што треба да на датотеката 228 00:11:18,500 --> 00:11:19,500 дека пишуваме да. 229 00:11:19,500 --> 00:11:24,270 Значи ова е вообичаена пракса, командата копија Линукс. 230 00:11:24,270 --> 00:11:26,550 >> На самиот почеток на ова видео, јас го имав протест 231 00:11:26,550 --> 00:11:29,840 дека ние ќе се зборува малку за покажувачи. 232 00:11:29,840 --> 00:11:32,480 Тука е специјално каде сме кога ќе зборуваме за покажувачи 233 00:11:32,480 --> 00:11:34,800 во прилог на датотека покажувачи. 234 00:11:34,800 --> 00:11:37,870 Затоа оваа функција изгледа вид на страшно. 235 00:11:37,870 --> 00:11:39,120 Тоа доби неколку параметри. 236 00:11:39,120 --> 00:11:40,430 Има многу се случува тука. 237 00:11:40,430 --> 00:11:42,760 Има многу различни бои и текстови. 238 00:11:42,760 --> 00:11:47,100 Но, навистина, тоа е само на генерички верзија на fgetc 239 00:11:47,100 --> 00:11:50,110 која ни овозможува да се добие било количина на информации. 240 00:11:50,110 --> 00:11:53,560 Тоа може да биде малку неефикасна, ако ние сме добивање ликови едно по едно време, 241 00:11:53,560 --> 00:11:55,770 процесирањето на фајлот еден карактер во исто време. 242 00:11:55,770 --> 00:12:00,230 Зарем не би било поубаво да се добие 100, во време или 500 во исто време? 243 00:12:00,230 --> 00:12:03,250 >> Па, fread и нејзиниот придружник функција fwrite, што ние ќе зборуваме за 244 00:12:03,250 --> 00:12:05,490 во една секунда, ни дозволуваат да го прават токму тоа. 245 00:12:05,490 --> 00:12:08,480 Ние може да се прочита на произволен износ на информации од датотека 246 00:12:08,480 --> 00:12:10,290 и ние тоа го чувате некаде привремено. 247 00:12:10,290 --> 00:12:12,980 Наместо да бидат во можност да се само тоа се вклопуваат во една променлива, 248 00:12:12,980 --> 00:12:15,790 ние би можеле да треба да се чува во низа. 249 00:12:15,790 --> 00:12:19,980 И така, се поминува во четири аргументи да fread-- покажувач 250 00:12:19,980 --> 00:12:23,940 до локацијата каде сме случува да ја запази информацијата, 251 00:12:23,940 --> 00:12:29,180 колку големи секоја единица на информации ќе биде, колку единици на информации 252 00:12:29,180 --> 00:12:35,192 ние сакаме да се здобијат, како и од датотека која ние сакаме да ги добие. 253 00:12:35,192 --> 00:12:37,150 Веројатно најдобро илустрирано со пример тука. 254 00:12:37,150 --> 00:12:41,640 Значи, да се каже дека ние се изјасни низа од 10 цели броеви. 255 00:12:41,640 --> 00:12:45,080 Ние само што објави на магацинот произволно int ТП 10. 256 00:12:45,080 --> 00:12:46,970 Значи тоа е прилично јасна. 257 00:12:46,970 --> 00:12:51,970 Сега она што го правиме сепак е frecall е што ти ја читаш големината на int 258 00:12:51,970 --> 00:12:54,180 Времето 10 бајти на информации. 259 00:12:54,180 --> 00:12:59,040 Големина на int суштество four-- тоа е на големината на цел број во в. 260 00:12:59,040 --> 00:13:02,790 >> Значи она што го правиме е ние сме читање 40 бајти во вредност од информации 261 00:13:02,790 --> 00:13:05,850 од датотеката посочени од меморија. 262 00:13:05,850 --> 00:13:08,600 И ние сме чување на оние 40 бајти некаде 263 00:13:08,600 --> 00:13:12,080 каде што се издвои 40 бајти во вредност од меморијата. 264 00:13:12,080 --> 00:13:15,970 За среќа, ние сме веќе го направиле тоа од страна на прогласување ARR, таа низа право таму. 265 00:13:15,970 --> 00:13:19,770 Кој е способен за држење 10-бајт четири единици. 266 00:13:19,770 --> 00:13:22,860 Така што во вкупно, тоа може да се одржи 40 бајти во вредност од информации. 267 00:13:22,860 --> 00:13:26,540 И ние сме сега со читање 40 бајти на информации од датотека, 268 00:13:26,540 --> 00:13:30,330 и ние сме чување на тоа во ТП. 269 00:13:30,330 --> 00:13:35,470 >> Потсетиме од видеото на совети кои името на низа, како што ТП, 270 00:13:35,470 --> 00:13:38,370 е навистина само еден покажувач до својот прв елемент. 271 00:13:38,370 --> 00:13:43,680 Значи, кога ќе помине во ТП таму, ние се, всушност, минува во покажувач. 272 00:13:43,680 --> 00:13:46,120 >> Слично на тоа можеме да го направиме this-- ние не мора 273 00:13:46,120 --> 00:13:51,200 треба да се спаси нашата тампон на магацинот. 274 00:13:51,200 --> 00:13:54,990 Ние, исто така, може динамички алоцира тампон вака, употребувајќи Примерок. 275 00:13:54,990 --> 00:13:57,340 Запомнете, кога ние динамички алоцира меморија, 276 00:13:57,340 --> 00:14:00,550 ние сме го заштеда на грамада, не на магацинот. 277 00:14:00,550 --> 00:14:02,110 Но, тоа е уште една тампон. 278 00:14:02,110 --> 00:14:06,810 >> Тоа, сепак, во овој случај, е држи 640 бајти на информации 279 00:14:06,810 --> 00:14:09,230 затоа двојно зазема осум бајти. 280 00:14:09,230 --> 00:14:11,570 А ние бараме за 80 од нив. 281 00:14:11,570 --> 00:14:13,770 Сакаме да имаме простор да се одржи 80 двојки. 282 00:14:13,770 --> 00:14:17,210 Па 80 пати е 8 640 бајти информации. 283 00:14:17,210 --> 00:14:21,880 А тоа е повик да се fread собирање на 640 бајти на информации 284 00:14:21,880 --> 00:14:27,770 од датотеката која покажува меморија и складирање на тоа сега во arr2. 285 00:14:27,770 --> 00:14:32,770 >> Сега ние исто така може да се третираат fread само како повик кон fgetc. 286 00:14:32,770 --> 00:14:37,140 Во овој случај, ние сме само се обидува да добие еден лик од датотека. 287 00:14:37,140 --> 00:14:40,070 И ние не треба низа да се одржи карактер. 288 00:14:40,070 --> 00:14:43,170 Ние само може да се чува во променлив карактер. 289 00:14:43,170 --> 00:14:46,390 >> Фати, сепак, е дека кога ние само треба променлива, 290 00:14:46,390 --> 00:14:50,290 ние треба да помине во адресата на таа променлива 291 00:14:50,290 --> 00:14:52,550 бидејќи се потсетиме дека Првиот аргумент да fread 292 00:14:52,550 --> 00:14:59,210 е покажувач кон локацијата и меморија каде што сакаме да ја запази информацијата. 293 00:14:59,210 --> 00:15:01,550 Повторно, името на Низа е покажувачот. 294 00:15:01,550 --> 00:15:04,200 Така што не треба да направите симболот низа. 295 00:15:04,200 --> 00:15:07,270 Но, в, ликот в тука, не е низа. 296 00:15:07,270 --> 00:15:08,390 Тоа е само една променлива. 297 00:15:08,390 --> 00:15:11,840 И така ние треба да помине симболот C за да се покаже 298 00:15:11,840 --> 00:15:15,350 дека тоа е адресата каде што сакаме за складирање на овие еден бајт на информации, 299 00:15:15,350 --> 00:15:20,479 овој лик кој ние сме се собираат од меморија. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- јас ќе одам преку ова малку повеќе 301 00:15:22,270 --> 00:15:25,440 quickly-- е доста Точниот еквивалент на fread 302 00:15:25,440 --> 00:15:27,720 освен тоа е за пишување наместо на читање, само 303 00:15:27,720 --> 00:15:31,610 како на other-- имавме отворени и блиски, да се добие лик, 304 00:15:31,610 --> 00:15:32,530 напишете карактер. 305 00:15:32,530 --> 00:15:35,040 Сега е се произволни количина на информации, 306 00:15:35,040 --> 00:15:37,170 право произволни количина на информации. 307 00:15:37,170 --> 00:15:39,790 Па како и порано, можеме имаат низа од 10 цели броеви 308 00:15:39,790 --> 00:15:43,210 каде што веќе го имаме информации што се зачувани, можеби. 309 00:15:43,210 --> 00:15:46,580 >> Тоа беше веројатно некои линии на код кои треба да одат меѓу овие два 310 00:15:46,580 --> 00:15:49,990 каде што јас се пополни со ARR нешто значајно. 311 00:15:49,990 --> 00:15:51,880 Јас го пополнат со 10 различни цели броеви. 312 00:15:51,880 --> 00:15:54,920 И наместо тоа, она што јас сум прави е пишано од ТП 313 00:15:54,920 --> 00:15:58,600 како и собирање на информации од ТП. 314 00:15:58,600 --> 00:16:02,390 И јас сум преземање на тие информации и тоа ставање во датотеката. 315 00:16:02,390 --> 00:16:05,410 >> Така, наместо за тоа да се биде од датотека на тампон, 316 00:16:05,410 --> 00:16:08,790 ние сме сега ќе од тампон до датотеката. 317 00:16:08,790 --> 00:16:10,580 Па тоа е само обратно. 318 00:16:10,580 --> 00:16:16,680 Значи, повторно, како и порано, можеме исто така, имаат еден куп парче меморија 319 00:16:16,680 --> 00:16:19,600 дека ние сме динамички доделени и да чита од кои 320 00:16:19,600 --> 00:16:21,570 и пишува дека во датотеката. 321 00:16:21,570 --> 00:16:24,900 >> А имаме и една променлива способен да држи еден бајт 322 00:16:24,900 --> 00:16:27,200 на информации, како што се на карактер. 323 00:16:27,200 --> 00:16:29,830 Но, повторно, ние треба да помине во на адресата на таа променлива 324 00:16:29,830 --> 00:16:31,840 кога сакаме да се прочита од неа. 325 00:16:31,840 --> 00:16:35,280 За да можеме да се пишува на информации ќе најдеме на таа адреса 326 00:16:35,280 --> 00:16:39,050 да го покажувачот на датотеката, кон меморија. 327 00:16:39,050 --> 00:16:41,630 >> Има многу други голема датотека I / O функции 328 00:16:41,630 --> 00:16:44,650 кои прават различни нешта, покрај оние кои ние разговаравме за денес. 329 00:16:44,650 --> 00:16:46,450 Неколку од оние може да најдете корисни 330 00:16:46,450 --> 00:16:50,840 се fgets и fputs, кои се еквивалент 331 00:16:50,840 --> 00:16:56,190 на fgetc и fputc но за читање еден стринг од датотека. 332 00:16:56,190 --> 00:16:59,020 Наместо на еден лик, тоа ќе го прочитаат целиот стринг. 333 00:16:59,020 --> 00:17:02,940 fprintf, кој во основа им овозможува на можете да го користите printf да запишам во датотеката. 334 00:17:02,940 --> 00:17:05,619 Па исто како можете да го направите замена променлива користење 335 00:17:05,619 --> 00:17:09,900 променливи проценти i и проценти г, и така натаму, со printf 336 00:17:09,900 --> 00:17:14,690 на сличен начин можете да ги преземе printf низа и печати нешто 337 00:17:14,690 --> 00:17:16,800 како онаа во датотека. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- ако имате DVD плеер е аналогијата Јас обично користам here-- 339 00:17:20,720 --> 00:17:23,109 е вид на како го користите вашиот премотам касетата и брзо напред 340 00:17:23,109 --> 00:17:25,819 копчиња за да се движите низ филмот. 341 00:17:25,819 --> 00:17:28,369 Слично на тоа, можете да се движите низ датотека. 342 00:17:28,369 --> 00:17:30,250 Една од работите внатре таа датотека структура 343 00:17:30,250 --> 00:17:34,270 дека в создава за вас е индикатор од каде што се во датотеката. 344 00:17:34,270 --> 00:17:36,420 Дали сте на самиот почетокот, во бајт нула? 345 00:17:36,420 --> 00:17:39,290 Дали сте во бајт 100, 1.000 бајт, и така натаму? 346 00:17:39,290 --> 00:17:44,340 Можете да го користите fseek произволно да се движат тој показател напред или назад. 347 00:17:44,340 --> 00:17:46,744 >> И ftell, повторно слични на DVD плеер, 348 00:17:46,744 --> 00:17:49,660 е како мала часовник кој ја раскажува вие колку минути и секунди 349 00:17:49,660 --> 00:17:52,480 се во одреден филм. 350 00:17:52,480 --> 00:17:56,990 Слично на тоа, ftell ви кажува колку многу бајти сте во датотеката. 351 00:17:56,990 --> 00:18:00,210 feof е поинаква верзија за откривање дали сте 352 00:18:00,210 --> 00:18:01,700 стигна до крајот на датотеката. 353 00:18:01,700 --> 00:18:03,600 И ferror е функција дека можете да го користите 354 00:18:03,600 --> 00:18:06,959 за да открие дали има нешто нема погрешно работење со некоја датотека. 355 00:18:06,959 --> 00:18:08,750 Повторно, ова е само гребење по површината. 356 00:18:08,750 --> 00:18:12,730 Има уште многу повеќе датотека I / O функции во стандардниот io.h. 357 00:18:12,730 --> 00:18:16,620 Но, ова веројатно ќе ви се добие започна да работи со датотека покажувачи. 358 00:18:16,620 --> 00:18:17,640 Јас сум Даг Лојд. 359 00:18:17,640 --> 00:18:19,750 Ова е CS50. 360 00:18:19,750 --> 00:18:21,669