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 Там трохі маленькі біт дзе мы будзем казаць пра іх, 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 >> Цяпер кожны функцыя паказальнік файла, або кожны файл уводу-высновы, ўводу-вываду / 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 і яго кампаньён Функцыя fclose, 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 у любой іншай файл функцыі ўводу / высновы. 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 Але калі вы паспрабуеце і разнаймення пусты паказальнік нагадаем, 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-- PTR быць агульным Прозвішча, імя, файл pointer-- FOPEN 79 00:03:52,690 --> 00:03:57,300 і мы праходзім ў двух рэчах, імя файла і аперацыя, мы хочам распачаць. 80 00:03:57,300 --> 00:04:01,690 Такім чынам, мы, магчыма, выклік, які выглядае як this-- файл зорка PTR 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 >> Так што вы думаеце г тут? 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 Так г з'яўляецца аперацыя, што мы выбіраць, калі мы хочам, каб прачытаць файл. 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 >> Што пра fclose? 107 00:05:18,930 --> 00:05:21,600 Ну, даволі проста, fclose проста прымае паказальнік на файл. 108 00:05:21,600 --> 00:05:24,000 І, як вы маглі б чакаць, яна закрывае файл. 109 00:05:24,000 --> 00:05:29,270 І як толькі мы зачынілі файл, мы не можам выконваць больш функцый файл уводу / высновы, 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 працягваць працаваць з яго з дапамогай функцыі ўводу / высновы. 113 00:05:38,610 --> 00:05:41,520 Так fclose сродкі мы зрабілі працуе з гэтым файлам. 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 Мы можам толькі fclose ptr1. 120 00:05:58,890 --> 00:06:01,950 І сапраўды гэтак жа, мог мы fclose на іншыя. 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, PTR ня роўна 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 і гэтак далей, і гэтак далей, цыкл праз такім чынам 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, fclose і fgetc 195 00:09:29,450 --> 00:09:34,950 і мы ўжо можам дубляваць тэрмінал каманднай Linux. 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 збіраюся напісаць ліст у A ў файле 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 >> І зараз мы дублююцца пар, вельмі асноўная каманда Linux 221 00:10:54,090 --> 00:10:59,100 што мы гаварылі пра так доўга таму ў Linux каманды відэа. 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 Так што гэта пар, каманда Linux копія. 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-- гэта памер цэлага ліку ў C. 260 00:12:59,040 --> 00:13:02,790 >> Такім чынам, што мы робім, мы чытаем 40 байт інфармацыі варта 261 00:13:02,790 --> 00:13:05,850 з файла, на які паказвае PTR. 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 На шчасце, мы ўжо зрабілі, што, заявіўшы, апр, што масіў прама там. 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 разоў 8640 байт інфармацыі. 283 00:14:17,210 --> 00:14:21,880 І, што выклік з'яўляецца FREAD збор 640 байтаў інфармацыі 284 00:14:21,880 --> 00:14:27,770 ад файла, названага PTR і захоўваць яго ў цяперашні час у 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 І таму мы павінны прайсці Ампэрсанд з пазначыць 298 00:15:11,840 --> 00:15:15,350 , Што гэта адрас, дзе мы хочам захоўваць гэтую адзін байт інфармацыі, 299 00:15:15,350 --> 00:15:20,479 гэта адзін знак, што мы спагнанні з PTR. 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 дзе я запоўніць обр з нешта значнае. 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 з паказальнікам файла, PTR. 327 00:16:39,050 --> 00:16:41,630 >> Там шмат іншай файле функцыі ўводу / высновы 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 Местозаполнители адсоткаў я і адсоткаў д, і гэтак далей, з 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, Байт 1000, і гэтак далей? 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 Там яшчэ шмат больш файлавы ўвод / выснова функцыі ў стандартнай 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