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