1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> GŁOŚNIK: Jak dotąd, jest prawdopodobne, że większość programów 3 00:00:07,870 --> 00:00:10,170 były nieco efemeryczne. 4 00:00:10,170 --> 00:00:13,310 Uruchomić program jak Mario czy chciwy. 5 00:00:13,310 --> 00:00:17,350 To coś robi, to być może poprosi użytkownik z jakiegoś informacji 6 00:00:17,350 --> 00:00:20,400 wydrukować jakieś wyjście do ekranu, ale wtedy, gdy program się skończy, 7 00:00:20,400 --> 00:00:23,252 tam naprawdę nie ma dowodów kiedykolwiek prowadzono w pierwszej kolejności. 8 00:00:23,252 --> 00:00:25,960 To znaczy, na pewno, może masz po lewej stronie go otworzyć w oknie terminala, 9 00:00:25,960 --> 00:00:29,770 ale jeśli wyczyścić ekran, nie ma Naprawdę nie ma dowodów na to, że istniał. 10 00:00:29,770 --> 00:00:33,720 Nie mamy umożliwiające przechowywanie trwałe informacje, informacje 11 00:00:33,720 --> 00:00:36,890 który istnieje po naszym programu zostało zatrzymane, 12 00:00:36,890 --> 00:00:39,241 czy nie mamy do tej pory. 13 00:00:39,241 --> 00:00:41,490 Na szczęście jednak, c robi Podziel się z nami zdolności 14 00:00:41,490 --> 00:00:44,220 to zrobić poprzez wdrożenie coś, co nazywa 15 00:00:44,220 --> 00:00:48,330 plik, struktura, która w zasadzie reprezentuje plik, który chcesz podwoić 16 00:00:48,330 --> 00:00:53,826 kliknij na komputerze, jeśli jesteś wykorzystywane do graficznego środowiska użytkownika. 17 00:00:53,826 --> 00:00:55,700 Generalnie podczas pracy zc, jesteśmy w rzeczywistości 18 00:00:55,700 --> 00:00:59,965 będzie pracować z wskaźniki do files-- plik stars-- 19 00:00:59,965 --> 00:01:02,090 chyba na trochę kiedy mówimy o parze 20 00:01:02,090 --> 00:01:04,560 z funkcji pracować z wskaźniki plików. 21 00:01:04,560 --> 00:01:08,990 Nie trzeba się naprawdę wykopał zbyt głęboko do wskaźników zrozumienie 22 00:01:08,990 --> 00:01:09,730 sami. 23 00:01:09,730 --> 00:01:12,870 Jest trochę malusieńki nieco gdzie będziemy rozmawiać o nich, 24 00:01:12,870 --> 00:01:18,090 ale generalnie złożyć wskaźników i wskaźniki, natomiast ze sobą powiązane, 25 00:01:18,090 --> 00:01:20,290 nie jest dokładnie to samo. 26 00:01:20,290 --> 00:01:22,440 >> Teraz co mam na myśli, kiedy Mówię trwałe dane? 27 00:01:22,440 --> 00:01:23,650 Co to jest trwałe dane? 28 00:01:23,650 --> 00:01:25,232 Dlaczego dbamy o tym? 29 00:01:25,232 --> 00:01:27,190 Załóżmy na przykład, że używasz programu 30 00:01:27,190 --> 00:01:29,850 lub już przepisany Program, że jest to gra, 31 00:01:29,850 --> 00:01:32,960 i chcesz śledzić wszystkich ruchów użytkownika 32 00:01:32,960 --> 00:01:36,620 tak, że może jeśli coś pójdzie nie tak, można przejrzeć plik po meczu. 33 00:01:36,620 --> 00:01:39,970 To, co mamy na myśli mówić o trwałych danych. 34 00:01:39,970 --> 00:01:43,930 >> W trakcie prowadzenia swojej Program tworzony jest plik. 35 00:01:43,930 --> 00:01:45,680 A gdy program zatrzymał się pracuje, 36 00:01:45,680 --> 00:01:48,689 że plik nadal istnieje w systemie. 37 00:01:48,689 --> 00:01:50,230 I możemy spojrzeć na to i zbadać go. 38 00:01:50,230 --> 00:01:53,670 I tak, że program byłby ustawiony Stworzyliśmy kilka trwałych danych, 39 00:01:53,670 --> 00:01:57,390 istnieją dane po programie zakończy działanie. 40 00:01:57,390 --> 00:02:02,320 >> Teraz wszystkie te funkcje, które działają z tworzenia plików i manipulowania 41 00:02:02,320 --> 00:02:04,940 je na różne sposoby Mieszkam w standardowym io.h, 42 00:02:04,940 --> 00:02:08,210 który plik jest nagłówek, który masz może być funta 43 00:02:08,210 --> 00:02:10,910 w tym na górnej dość znacznie wszystkich programów 44 00:02:10,910 --> 00:02:14,130 ponieważ zawiera ona jedną z najbardziej przydatne funkcje dla nas, 45 00:02:14,130 --> 00:02:16,130 printf, które również pozwala Mieszka w standardowym io.h. 46 00:02:16,130 --> 00:02:20,400 Więc nie trzeba bić to Prawdopodobnie jakieś dodatkowe pliki 47 00:02:20,400 --> 00:02:23,540 w celu pracy z wskaźniki plików. 48 00:02:23,540 --> 00:02:29,980 >> Teraz każda funkcja wskaźnik pliku, lub każdy plik I / O, wyjście wejście 49 00:02:29,980 --> 00:02:33,310 funkcja przyjmuje jako jeden jego parametrów lub wejść 50 00:02:33,310 --> 00:02:35,822 pointer-- plik wyjątkiem dla jednego, fopen, które 51 00:02:35,822 --> 00:02:38,280 jest to, czego używać, aby pobrać plik Wskaźnik w pierwszej kolejności. 52 00:02:38,280 --> 00:02:41,010 Ale po tym, jak otworzył plik, a otrzymasz wskazówki, plików, 53 00:02:41,010 --> 00:02:43,510 można następnie przekazać je jako argumenty do różnych funkcji 54 00:02:43,510 --> 00:02:46,720 będziemy mówić o dzisiaj, jak i wielu innych 55 00:02:46,720 --> 00:02:48,520 tak, że można pracować z plikami. 56 00:02:48,520 --> 00:02:50,980 >> Więc istnieje sześć całkiem wspólne podstawowe, 57 00:02:50,980 --> 00:02:52,870 że będziemy dziś mówić. 58 00:02:52,870 --> 00:02:57,160 fopen i jego towarzyszka Funkcja fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 i jego funkcja towarzyszem fputc, i fread i jego funkcja towarzyszem, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Więc przejdźmy od razu do rzeczy. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- co to robi? 63 00:03:07,050 --> 00:03:10,050 Cóż, to otwiera plik i daje wskaźnik pliku do niej, 64 00:03:10,050 --> 00:03:14,000 tak, że można użyć, że złożyć wskaźnik jako argument 65 00:03:14,000 --> 00:03:16,730 któregokolwiek z drugiej funkcje I / O pliku. 66 00:03:16,730 --> 00:03:19,100 Najważniejszą rzeczą pamiętać fopen 67 00:03:19,100 --> 00:03:24,222 jest, że po otwarty pliku lub wykonane połączenia, jak ten tutaj, 68 00:03:24,222 --> 00:03:26,930 należy sprawdzić, aby upewnić się, że wskaźnik, że wróciłeś 69 00:03:26,930 --> 00:03:28,320 nie jest równa null. 70 00:03:28,320 --> 00:03:31,320 Jeśli nie oglądałem film na wskaźniki, to może nie ma sensu. 71 00:03:31,320 --> 00:03:35,639 Ale jeśli spróbujesz i dereference recall null pointer, 72 00:03:35,639 --> 00:03:38,180 Twój program będzie prawdopodobnie cierpi segmentacja [niesłyszalne]. 73 00:03:38,180 --> 00:03:40,540 Chcemy, aby upewnić się, że ma uzasadniony wskaźnik plecy. 74 00:03:40,540 --> 00:03:43,665 Zdecydowana większość czasu będziemy zdobyć uzasadniony wskaźnik powrotem 75 00:03:43,665 --> 00:03:45,280 i nie będzie problemu. 76 00:03:45,280 --> 00:03:46,760 >> Jak więc zrobić wywołanie fopen? 77 00:03:46,760 --> 00:03:48,051 Wygląda prawie tak. 78 00:03:48,051 --> 00:03:52,690 Gwiazda pliku ptr-- ptr jest ogólna nazwę dla pliku pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 i przechodzimy w dwóch rzeczy, nazwę pliku i operacja chcemy podjąć. 80 00:03:57,300 --> 00:04:01,690 Więc możemy mieć telefon, który wygląda jak this-- gwiazda plik ptr 1 równa fopen 81 00:04:01,690 --> 00:04:04,040 plik1.txt. 82 00:04:04,040 --> 00:04:07,020 I operacja wybrałem jest r. 83 00:04:07,020 --> 00:04:08,639 >> Więc co sądzisz r jest tutaj? 84 00:04:08,639 --> 00:04:11,180 Jakie są rodzaje rzeczy może być w stanie zrobić, aby pliki? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Tak więc r jest operacją, że wybrać, gdy chcemy odczytać plik. 87 00:04:17,500 --> 00:04:20,260 Więc byłoby w zasadzie, gdy możemy wykonać połączenie tak 88 00:04:20,260 --> 00:04:25,440 być coraz sobie wskaźnik pliku takie, że możemy to odczytać informacje 89 00:04:25,440 --> 00:04:27,770 z file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Podobnie, możemy otworzyć pliku 2.txt do pisania, a więc może przejść PTR2, 91 00:04:34,190 --> 00:04:38,210 wskaźnik pliku stworzyłem tutaj, jako argument do dowolnej funkcji 92 00:04:38,210 --> 00:04:40,080 zapisuje informację do pliku. 93 00:04:40,080 --> 00:04:43,767 I podobne do pisania, nie również możliwość dołączania, a. 94 00:04:43,767 --> 00:04:45,600 Różnica pomiędzy pisanie i dopisywania 95 00:04:45,600 --> 00:04:50,920 jest, że podczas zapisu do pliku, jeśli można dodzwonić się do fopen do pisania 96 00:04:50,920 --> 00:04:54,761 i że plik już istnieje, to zamiar zastąpić cały plik. 97 00:04:54,761 --> 00:04:56,510 To będzie zacząć na początku 98 00:04:56,510 --> 00:04:58,820 usuwanie wszystkich informacji że już tam jest. 99 00:04:58,820 --> 00:05:02,210 >> Natomiast jeśli otworzysz go do dopisywania, będzie go do końca pliku 100 00:05:02,210 --> 00:05:04,340 jeśli jest już tekst to czy informacje w nim, 101 00:05:04,340 --> 00:05:06,040 i będzie następnie rozpocząć pisanie stamtąd. 102 00:05:06,040 --> 00:05:08,570 Więc nie stracisz żadnej z Informacje zrobiłeś wcześniej. 103 00:05:08,570 --> 00:05:12,110 Czy chcesz napisać lub dołączyć rodzaj zależy od sytuacji. 104 00:05:12,110 --> 00:05:16,840 Ale prawdopodobnie będziesz wiedzieć, co prawo operacja jest, gdy nadejdzie czas. 105 00:05:16,840 --> 00:05:18,020 Więc to fopen. 106 00:05:18,020 --> 00:05:18,930 >> Co fclose? 107 00:05:18,930 --> 00:05:21,600 Cóż, całkiem po prostu, fclose po prostu akceptuje wskaźnik pliku. 108 00:05:21,600 --> 00:05:24,000 I jak można się spodziewać, zamyka ten plik. 109 00:05:24,000 --> 00:05:29,270 A kiedy już zamknięty plik, nie możemy Plik wykonywać żadnych więcej Funkcje wejścia / wyjścia, 110 00:05:29,270 --> 00:05:31,420 odczytu lub zapisu, na tym pliku. 111 00:05:31,420 --> 00:05:36,444 Musimy ponownie otworzyć złożyć kolejny raz, aby 112 00:05:36,444 --> 00:05:38,610 do kontynuowania współpracy z wykorzystując funkcje I / O. 113 00:05:38,610 --> 00:05:41,520 Oznacza więc fclose skończymy pracy z tego pliku. 114 00:05:41,520 --> 00:05:44,690 I wszyscy musimy zdać się jest nazwa wskaźnika pliku. 115 00:05:44,690 --> 00:05:50,010 Więc na kilka slajdy temu, fopened plik tekstowy 1 kropka do czytania 116 00:05:50,010 --> 00:05:52,854 i przypisane, że wskaźnik do pliku PTR1. 117 00:05:52,854 --> 00:05:55,020 Teraz zdecydowaliśmy, że jesteśmy wykonane z czytania tego pliku. 118 00:05:55,020 --> 00:05:56,561 Nie musisz robić nic więcej z nim. 119 00:05:56,561 --> 00:05:58,890 Możemy po prostu fclose PTR1. 120 00:05:58,890 --> 00:06:01,950 I podobnie, możemy fclose pozostałych. 121 00:06:01,950 --> 00:06:02,450 W porządku. 122 00:06:02,450 --> 00:06:03,700 Więc to jest otwarcie i zamknięcie. 123 00:06:03,700 --> 00:06:05,780 Są dwa podstawowe rozpoczęciem pracy. 124 00:06:05,780 --> 00:06:08,050 >> Teraz chcemy, aby rzeczywiście zrobić kilka ciekawych rzeczy, 125 00:06:08,050 --> 00:06:11,940 a pierwszą funkcją we''ll zobaczyć, że zrobi to fgetc-- 126 00:06:11,940 --> 00:06:14,110 złożyć uzyskać charakter. 127 00:06:14,110 --> 00:06:17,350 To, co fgetc ogólnie przełoży się. 128 00:06:17,350 --> 00:06:20,190 Jego celem w życiu jest czytaj następny znak, 129 00:06:20,190 --> 00:06:22,079 lub jeśli jest to twój bardzo Pierwsze połączenie fgetc 130 00:06:22,079 --> 00:06:23,870 dla określonego pliku, pierwszy znak. 131 00:06:23,870 --> 00:06:26,210 Ale po tym, pojawi się następny, 132 00:06:26,210 --> 00:06:31,500 już następnego znak tego pliku, i zapisuje ją w zmiennej charakter. 133 00:06:31,500 --> 00:06:34,490 Jak robiliśmy tutaj, char ch równa fgetc, 134 00:06:34,490 --> 00:06:36,389 przekazać w imię wskaźnika pliku. 135 00:06:36,389 --> 00:06:38,180 Ponownie, jest to bardzo Ważne, żeby pamiętać, 136 00:06:38,180 --> 00:06:41,430 że w celu uzyskania ta operacja się uda, 137 00:06:41,430 --> 00:06:45,690 sam wskaźnik pliku musiało zostały otwarte do czytania. 138 00:06:45,690 --> 00:06:50,589 Nie możemy odczytać znak z pliku wskaźnik, który otworzyliśmy w formie pisemnej. 139 00:06:50,589 --> 00:06:52,630 Jest to więc jeden z Ograniczenia fopen, prawda? 140 00:06:52,630 --> 00:06:55,470 Musimy ograniczyć się tylko do wykonywania 141 00:06:55,470 --> 00:06:57,710 jedna operacja z jednego wskaźnika pliku. 142 00:06:57,710 --> 00:07:00,220 Gdybyśmy chcieli czytać i Napisać z tego samego pliku, 143 00:07:00,220 --> 00:07:03,840 będziemy mieć otwarte dwa oddzielne wskaźniki plik do tego samego file-- 144 00:07:03,840 --> 00:07:05,670 jeden do czytania, jeden do pisania. 145 00:07:05,670 --> 00:07:08,400 >> Więc jeszcze raz, tylko dlatego, Przynoszę, że się jest 146 00:07:08,400 --> 00:07:11,920 bo jeśli mamy zamiar wykonać połączenie fgetc, że wskaźnik pliku musiało 147 00:07:11,920 --> 00:07:14,172 zostały otwarte do czytania. 148 00:07:14,172 --> 00:07:15,880 A potem całkiem po prostu, Wszystko, co trzeba zrobić, 149 00:07:15,880 --> 00:07:17,546 jest przekazać w imię wskaźnika pliku. 150 00:07:17,546 --> 00:07:21,060 Więc char ch równa fgetc PTR1. 151 00:07:21,060 --> 00:07:23,200 >> Że będzie się nas następny character-- 152 00:07:23,200 --> 00:07:25,575 Lub też, jeżeli jest to pierwszy razem zrobiliśmy to wezwanie, 153 00:07:25,575 --> 00:07:29,750 pierwszy character-- niezależnie Plik jest wskazywany przez PTR1. 154 00:07:29,750 --> 00:07:32,210 Przypomnijmy, że to był plik 1 kropka tekst. 155 00:07:32,210 --> 00:07:36,490 Będzie się pierwszy znak, że a my go przechowywać w zmiennej ch. 156 00:07:36,490 --> 00:07:37,941 Całkiem proste. 157 00:07:37,941 --> 00:07:40,190 Więc my spojrzał tylko na trzech funkcje i już mamy 158 00:07:40,190 --> 00:07:43,070 Można zrobić coś całkiem zgrabny. 159 00:07:43,070 --> 00:07:46,320 >> Więc jeśli weźmiemy tę zdolność na uzyskanie znaku 160 00:07:46,320 --> 00:07:48,943 i pętla it-- więc nadal się znaki 161 00:07:48,943 --> 00:07:51,390 z pliku nad i nad i over-- teraz 162 00:07:51,390 --> 00:07:54,500 może czytać każdy postać pliku. 163 00:07:54,500 --> 00:07:58,670 A jeśli wydrukować każdy znak natychmiast po go przeczytać, 164 00:07:58,670 --> 00:08:01,960 mamy teraz czytać z pliku i drukowane jego zawartość na ekranie. 165 00:08:01,960 --> 00:08:05,610 Mamy skutecznie łączone ten plik na ekranie. 166 00:08:05,610 --> 00:08:09,670 I to jest to, co Linux polecenie kot robi. 167 00:08:09,670 --> 00:08:13,250 >> Jeśli wpiszesz kota w nazwie pliku go, wydrukuje całą zawartość 168 00:08:13,250 --> 00:08:15,160 pliku w oknie terminala. 169 00:08:15,160 --> 00:08:19,010 I tak ta mała pętla tutaj, tylko trzy linie kodu, 170 00:08:19,010 --> 00:08:23,270 ale skutecznie powiela Polecenie cat Linux. 171 00:08:23,270 --> 00:08:25,210 Więc ta składnia może wygląda trochę dziwnie, 172 00:08:25,210 --> 00:08:26,670 ale oto co się tutaj dzieje. 173 00:08:26,670 --> 00:08:31,460 Podczas ch równa fgetc, ptr nie jest równa EOF-- to cała kupa, 174 00:08:31,460 --> 00:08:34,669 ale niech rozbicie go po prostu więc jest jasne, na składni. 175 00:08:34,669 --> 00:08:37,169 Mam skonsolidowane go ze względu na przestrzeń 176 00:08:37,169 --> 00:08:39,049 choć jest to trochę składniowo trudne. 177 00:08:39,049 --> 00:08:41,194 >> Tak więc ta część w zielonej prawo teraz, co on robi? 178 00:08:41,194 --> 00:08:42,860 Dobrze, że to właśnie nasze wezwanie fgetc, prawda? 179 00:08:42,860 --> 00:08:44,530 Widzieliśmy, że przed. 180 00:08:44,530 --> 00:08:49,500 To uzyskania jednego znaków z pliku. 181 00:08:49,500 --> 00:08:53,220 Następnie porównujemy, że znak przed EOF. 182 00:08:53,220 --> 00:08:57,470 EOF jest szczególną wartością, która jest zdefiniowano w standardzie io.h, która 183 00:08:57,470 --> 00:08:59,390 jest znak końca pliku. 184 00:08:59,390 --> 00:09:03,450 Więc w zasadzie to, co się wydarzy jest to pętla będzie czytać charakter, 185 00:09:03,450 --> 00:09:07,445 porównać go do wartość EOF, znak końca pliku. 186 00:09:07,445 --> 00:09:10,070 Jeśli nie pasują, więc nie mamy osiągnął koniec pliku, 187 00:09:10,070 --> 00:09:11,490 będziemy drukować ten znak na zewnątrz. 188 00:09:11,490 --> 00:09:13,740 Potem wrócimy do początku pętli ponownie. 189 00:09:13,740 --> 00:09:18,310 Dostaniemy znak, sprawdzić przeciwko EOF, wydrukować, i tak dalej 190 00:09:18,310 --> 00:09:21,094 i tak dalej, i tak dalej, krążący w ten sposób 191 00:09:21,094 --> 00:09:22,760 dopóki nie dotarł do końca pliku. 192 00:09:22,760 --> 00:09:24,593 A następnie w tym momencie, będziemy wydrukowaniu 193 00:09:24,593 --> 00:09:26,210 z całej zawartości pliku. 194 00:09:26,210 --> 00:09:29,450 Więc jeszcze raz, mamy tylko widziałem fopen, fclose i fgetc 195 00:09:29,450 --> 00:09:34,950 i już możemy powielić terminal poleceń Linuksa. 196 00:09:34,950 --> 00:09:38,850 >> Jak powiedziałem na początku, mieliśmy fgetc i fputc, 197 00:09:38,850 --> 00:09:41,860 i fputc był towarzyszem Funkcja fgetc. 198 00:09:41,860 --> 00:09:44,880 I tak, jak pan może sobie wyobrazić, jest to równoważne pisania. 199 00:09:44,880 --> 00:09:49,440 To pozwala nam napisać pojedynczy znak do pliku. 200 00:09:49,440 --> 00:09:53,290 >> Ponownie, zastrzeżenie jest, po prostu jak to było z fgetc plik 201 00:09:53,290 --> 00:09:56,660 że piszemy do musiało być otwarty na piśmie lub do dopisywania. 202 00:09:56,660 --> 00:10:00,820 Jeśli spróbujemy i używać fputc na pliku że mamy otwarte do czytania, 203 00:10:00,820 --> 00:10:02,760 będziemy cierpieć trochę pomyłkę. 204 00:10:02,760 --> 00:10:04,440 Ale rozmowa jest dość prosta. 205 00:10:04,440 --> 00:10:08,000 Kapitał fputc PTR2 wszystko że zamierza zrobić, to jest to 206 00:10:08,000 --> 00:10:12,040 zamiar napisać list do do pliku 2 kropki 207 00:10:12,040 --> 00:10:14,760 Tekst, który się nazywał z plik, który otworzyliśmy i przypisany 208 00:10:14,760 --> 00:10:17,280 wskaźnik do PTR2. 209 00:10:17,280 --> 00:10:20,430 Tak więc mamy zamiar napisać Kapitał A do pliku 2 dot tekst. 210 00:10:20,430 --> 00:10:24,592 I będziemy pisać okrzyk wskazać plik 3 kropkę 211 00:10:24,592 --> 00:10:27,330 Tekst, który był wskazywany przez ptr3. 212 00:10:27,330 --> 00:10:29,730 Więc jeszcze raz, całkiem proste tutaj. 213 00:10:29,730 --> 00:10:32,727 >> Ale teraz możemy zrobić coś innego. 214 00:10:32,727 --> 00:10:34,560 Mamy ten przykład byliśmy po prostu się nad 215 00:10:34,560 --> 00:10:38,950 o jest w stanie replikować kota Komenda Linux, który wypisuje 216 00:10:38,950 --> 00:10:40,500 na ekranie. 217 00:10:40,500 --> 00:10:43,510 Dobrze, że teraz mamy możliwość odczytać znaki z plików 218 00:10:43,510 --> 00:10:46,590 i pisania znaków w plikach, dlaczego nie możemy po prostu zastąpić że 219 00:10:46,590 --> 00:10:50,720 zadzwonić do printf z wezwaniem do fputc. 220 00:10:50,720 --> 00:10:54,090 >> A teraz mamy powielane cp, bardzo prosty poleceń Linuksa 221 00:10:54,090 --> 00:10:59,100 że rozmawialiśmy o tak długo, temu w Linuksie Polecenia wideo. 222 00:10:59,100 --> 00:11:01,070 Skutecznie mam powielane, że właśnie tutaj. 223 00:11:01,070 --> 00:11:04,790 Jesteśmy czytania znaku, a następnie jesteśmy pisząc tę ​​postać do innego pliku. 224 00:11:04,790 --> 00:11:07,660 Czytanie z jednego pliku, pisanie do drugiego, kółko 225 00:11:07,660 --> 00:11:11,350 i znowu, aż trafiliśmy EOF. 226 00:11:11,350 --> 00:11:14,250 Mamy do końca plik chcemy skopiować z. 227 00:11:14,250 --> 00:11:18,500 I że będziemy pisali wszystkie znaków musimy pliku 228 00:11:18,500 --> 00:11:19,500 że jesteśmy piśmie. 229 00:11:19,500 --> 00:11:24,270 Więc to jest cp, polecenie copy Linux. 230 00:11:24,270 --> 00:11:26,550 >> Na samym początku Ten film, miałem zastrzeżenie 231 00:11:26,550 --> 00:11:29,840 że chcemy porozmawiać Trochę o wskazówki. 232 00:11:29,840 --> 00:11:32,480 Oto specjalnie gdzie jesteśmy będziemy mówić o wskazówki 233 00:11:32,480 --> 00:11:34,800 w uzupełnieniu do pliku wskazówek. 234 00:11:34,800 --> 00:11:37,870 Tak więc funkcja ta wygląda trochę przerażające. 235 00:11:37,870 --> 00:11:39,120 Jest tam kilka parametrów. 236 00:11:39,120 --> 00:11:40,430 Jest dużo się tu dzieje. 237 00:11:40,430 --> 00:11:42,760 Istnieje wiele różnych kolory i tekstów. 238 00:11:42,760 --> 00:11:47,100 Ale tak naprawdę, to tylko generic wersja fgetc 239 00:11:47,100 --> 00:11:50,110 która pozwala nam uzyskać dowolny ilość informacji. 240 00:11:50,110 --> 00:11:53,560 To może być nieco nieefektywne, jeśli będziemy coraz znaki, w czasie, 241 00:11:53,560 --> 00:11:55,770 iteracja pliku jeden znak na raz. 242 00:11:55,770 --> 00:12:00,230 Czy nie byłoby przyjemniej się 100 w czasie, lub 500 w czasie? 243 00:12:00,230 --> 00:12:03,250 >> Cóż, fread i jego funkcja towarzyszem fwrite, które będziemy rozmawiać o 244 00:12:03,250 --> 00:12:05,490 w drugim, pozwala nam nie tylko to. 245 00:12:05,490 --> 00:12:08,480 Możemy przeczytać dowolną ilość informacji z pliku 246 00:12:08,480 --> 00:12:10,290 i przechowywać go gdzieś tymczasowo. 247 00:12:10,290 --> 00:12:12,980 Zamiast być w stanie po prostu zmieścił się w pojedynczej zmiennej, 248 00:12:12,980 --> 00:12:15,790 Może trzeba przechowywać go w tablicy. 249 00:12:15,790 --> 00:12:19,980 I tak, mijamy w czterech argumenty fread-- wskaźnik 250 00:12:19,980 --> 00:12:23,940 w miejscu, w którym jesteśmy będzie do przechowywania informacji, 251 00:12:23,940 --> 00:12:29,180 jak duży każda jednostka informacji będzie, ile jednostek informacji 252 00:12:29,180 --> 00:12:35,192 chcemy nabyć, a od który plik chcemy je zdobyć. 253 00:12:35,192 --> 00:12:37,150 Prawdopodobnie najlepiej ilustruje o przykład. 254 00:12:37,150 --> 00:12:41,640 Więc powiedzmy, że deklarujemy tablica z 10 liczb. 255 00:12:41,640 --> 00:12:45,080 Właśnie ogłosił na układać dowolnie int arr 10. 256 00:12:45,080 --> 00:12:46,970 Więc to jest bardzo proste. 257 00:12:46,970 --> 00:12:51,970 Teraz to, co robimy jest jednak frecall jest czytamy rozmiar int 258 00:12:51,970 --> 00:12:54,180 razy 10 bajtów informacji. 259 00:12:54,180 --> 00:12:59,040 Rozmiar int istoty four-- to wielkość całkowitą w c. 260 00:12:59,040 --> 00:13:02,790 >> Więc to, co robimy jest czytamy 40 bajtów o wartości informacji 261 00:13:02,790 --> 00:13:05,850 z pliku wskazywanego przez ptr. 262 00:13:05,850 --> 00:13:08,600 A my przechowywania tych 40 bajtów gdzieś 263 00:13:08,600 --> 00:13:12,080 gdzie uchylenie 40 bajtów o wartości pamięci. 264 00:13:12,080 --> 00:13:15,970 Na szczęście mamy już zrobione, że oświadczając, arr, że tablica tam. 265 00:13:15,970 --> 00:13:19,770 Że jest w stanie utrzymać 10 jednostek czterech bajtów. 266 00:13:19,770 --> 00:13:22,860 Tak więc w sumie może pomieścić 40 bajtów warte informacji. 267 00:13:22,860 --> 00:13:26,540 I teraz czyta 40 bajtów informacji z pliku, 268 00:13:26,540 --> 00:13:30,330 a my przechowywania go w opr. 269 00:13:30,330 --> 00:13:35,470 >> Przypomnijmy, od wideo na wskaźników, które nazwa tablicy, takich jak ARR, 270 00:13:35,470 --> 00:13:38,370 jest tak naprawdę wskaźnik na pierwszym elemencie. 271 00:13:38,370 --> 00:13:43,680 Więc, kiedy mijamy w arr tam, są w rzeczywistości, przekazując wskaźnika. 272 00:13:43,680 --> 00:13:46,120 >> Podobnie możemy zrobić this-- Niekoniecznie 273 00:13:46,120 --> 00:13:51,200 należy zapisać naszą bufora na stosie. 274 00:13:51,200 --> 00:13:54,990 Mogliśmy również dynamicznie przydzielać Bufor ten sposób, za pomocą malloc. 275 00:13:54,990 --> 00:13:57,340 Pamiętaj, kiedy dynamicznie przydzielać pamięć, 276 00:13:57,340 --> 00:14:00,550 jesteśmy zapisanie go na kupa, nie stos. 277 00:14:00,550 --> 00:14:02,110 Ale to jeszcze bufor. 278 00:14:02,110 --> 00:14:06,810 >> Nadal w tym przypadku jest posiadający 640 bajtów informacji 279 00:14:06,810 --> 00:14:09,230 bo podwójne zajmuje osiem bajtów. 280 00:14:09,230 --> 00:14:11,570 A my z prośbą o 80 z nich. 281 00:14:11,570 --> 00:14:13,770 Chcemy mieć miejsca trzymać 80 dwuosobowych. 282 00:14:13,770 --> 00:14:17,210 Tak więc 80 razy 8 to informacja 640 bajtów. 283 00:14:17,210 --> 00:14:21,880 I że wezwanie do fread jest zbierając 640 bajtów informacji 284 00:14:21,880 --> 00:14:27,770 z pliku wskazanego przez ptr i przechowywania go teraz w ARR2. 285 00:14:27,770 --> 00:14:32,770 >> Teraz możemy również traktować fread jak wezwanie do fgetc. 286 00:14:32,770 --> 00:14:37,140 W tym przypadku, po prostu próbuje się jeden znak z pliku. 287 00:14:37,140 --> 00:14:40,070 A my nie potrzebujesz tablica trzymać znak. 288 00:14:40,070 --> 00:14:43,170 Możemy po prostu zapisać je w zmienny charakter. 289 00:14:43,170 --> 00:14:46,390 >> Połów jest jednak to, że kiedy po prostu zmienną, 290 00:14:46,390 --> 00:14:50,290 musimy przejść w adres tej zmiennej 291 00:14:50,290 --> 00:14:52,550 bo Przypomnijmy, że Pierwszym argumentem fread 292 00:14:52,550 --> 00:14:59,210 jest wskaźnik do lokalizacji i pamięci gdzie chcemy przechowywać informacje. 293 00:14:59,210 --> 00:15:01,550 Ponownie, nazwą Tablica jest wskaźnikiem. 294 00:15:01,550 --> 00:15:04,200 Więc nie musimy robić ampersand tablicę. 295 00:15:04,200 --> 00:15:07,270 Ale c, znak c tutaj, nie jest tablicą. 296 00:15:07,270 --> 00:15:08,390 To jest po prostu zmienna. 297 00:15:08,390 --> 00:15:11,840 A więc musimy zdać znaku & c, aby wskazać, 298 00:15:11,840 --> 00:15:15,350 że jest to adres, pod którym chcemy aby zapisać ten jeden bajt informacji, 299 00:15:15,350 --> 00:15:20,479 ten znak, który mamy do zbierania od ptr. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- Pójdę przez to trochę więcej 301 00:15:22,270 --> 00:15:25,440 quickly-- jest dość dużo Dokładny odpowiednik fread 302 00:15:25,440 --> 00:15:27,720 tylko, że to na piśmie zamiast czytania, po prostu 303 00:15:27,720 --> 00:15:31,610 jakby other-- mieliśmy otwarte i blisko, uzyskać znak, 304 00:15:31,610 --> 00:15:32,530 napisać znak. 305 00:15:32,530 --> 00:15:35,040 Teraz to się arbitralne Ilość informacji, 306 00:15:35,040 --> 00:15:37,170 prawo dowolna ilość informacji. 307 00:15:37,170 --> 00:15:39,790 Tak jak poprzednio, możemy mają tablicę 10 liczb całkowitych 308 00:15:39,790 --> 00:15:43,210 gdzie już mamy informacje przechowywane, być może. 309 00:15:43,210 --> 00:15:46,580 >> To było prawdopodobnie niektóre linie kodu które powinny przejść między tymi dwoma 310 00:15:46,580 --> 00:15:49,990 gdzie mogę wypełnić arr z coś znaczącego. 311 00:15:49,990 --> 00:15:51,880 I wypełnić go z 10 różnych liczb całkowitych. 312 00:15:51,880 --> 00:15:54,920 A zamiast tego, co mam robi pisze z ARR 313 00:15:54,920 --> 00:15:58,600 i zebranie informacji z ARR. 314 00:15:58,600 --> 00:16:02,390 A ja biorę tę informację i wprowadzenie go do pliku. 315 00:16:02,390 --> 00:16:05,410 >> Więc zamiast to istota z plik do bufora, 316 00:16:05,410 --> 00:16:08,790 jesteśmy teraz będzie z bufor do pliku. 317 00:16:08,790 --> 00:16:10,580 Więc to tylko odwrotnie. 318 00:16:10,580 --> 00:16:16,680 Więc znowu, podobnie jak poprzednio, możemy też kawał sterty pamięci 319 00:16:16,680 --> 00:16:19,600 że mamy dynamicznie alokowane i czytać, że 320 00:16:19,600 --> 00:16:21,570 i pisać, że do pliku. 321 00:16:21,570 --> 00:16:24,900 >> I mamy także jedną zmienną w stanie utrzymać jeden bajt 322 00:16:24,900 --> 00:16:27,200 informacji, takich jak charakter. 323 00:16:27,200 --> 00:16:29,830 Ale znowu, musimy zdać się adres tej zmiennej 324 00:16:29,830 --> 00:16:31,840 gdy chcemy odczytać z niego. 325 00:16:31,840 --> 00:16:35,280 Tak więc możemy napisać informacje znaleźć pod tym adresem 326 00:16:35,280 --> 00:16:39,050 do wskaźnika pliku, ptr. 327 00:16:39,050 --> 00:16:41,630 >> Jest wiele innych wspaniały plik / funkcje O 328 00:16:41,630 --> 00:16:44,650 robić różne rzeczy, że oprócz te, rozmawialiśmy o dniu dzisiejszym. 329 00:16:44,650 --> 00:16:46,450 Kilka z tych, może się okazać przydatna 330 00:16:46,450 --> 00:16:50,840 są fgets i fputs, które są odpowiednikiem 331 00:16:50,840 --> 00:16:56,190 z fgetc i fputc ale do czytania jeden ciąg z pliku. 332 00:16:56,190 --> 00:16:59,020 Zamiast pojedynczego znaku, będzie przeczytać cały ciąg. 333 00:16:59,020 --> 00:17:02,940 fprintf, co pozwala w zasadzie korzystanie printf, aby zapisać do pliku. 334 00:17:02,940 --> 00:17:05,619 Więc jak można wykonać Podstawienie zmiennej za pomocą 335 00:17:05,619 --> 00:17:09,900 Symbole zastępcze procent i oraz procent d, i tak dalej, z printf 336 00:17:09,900 --> 00:17:14,690 Podobnie można podjąć ciąg printf i drukowania coś 337 00:17:14,690 --> 00:17:16,800 tak pliku. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- jeśli masz odtwarzacz DVD jest analogia Zwykle używam here-- 339 00:17:20,720 --> 00:17:23,109 jest trochę jak za pomocą swojego do tyłu i do przodu 340 00:17:23,109 --> 00:17:25,819 przyciski do poruszania się wokół filmu. 341 00:17:25,819 --> 00:17:28,369 Podobnie, można poruszać się w pliku. 342 00:17:28,369 --> 00:17:30,250 Jedną z rzeczy wewnątrz że struktura pliku 343 00:17:30,250 --> 00:17:34,270 że c tworzy dla Ciebie jest wskaźnikiem od tego, gdzie jesteś w pliku. 344 00:17:34,270 --> 00:17:36,420 Czy jesteś na samym poczynając, na bajt zerowy? 345 00:17:36,420 --> 00:17:39,290 Czy jesteś na bajt 100, Bajt +1.000, i tak dalej? 346 00:17:39,290 --> 00:17:44,340 Możesz użyć fseek arbitralnie przenieść że wskaźnik przodu lub do tyłu. 347 00:17:44,340 --> 00:17:46,744 >> I ftell, ponownie podobna do odtwarzacza DVD, 348 00:17:46,744 --> 00:17:49,660 jest jak mały zegar, który mówi Ci, ile minut i sekund, 349 00:17:49,660 --> 00:17:52,480 są w szczególności filmu. 350 00:17:52,480 --> 00:17:56,990 Podobnie, ftell mówi, jak wiele bajtów jesteś do pliku. 351 00:17:56,990 --> 00:18:00,210 feof jest inna wersja wykrywania, czy masz 352 00:18:00,210 --> 00:18:01,700 osiągnięciu końca pliku. 353 00:18:01,700 --> 00:18:03,600 I ferror jest funkcją że można użyć 354 00:18:03,600 --> 00:18:06,959 w celu wykrycia, czy coś ma Gone Wrong pracy z plikiem. 355 00:18:06,959 --> 00:18:08,750 Ponownie, jest to po prostu zarysowania powierzchni. 356 00:18:08,750 --> 00:18:12,730 Jest jeszcze wiele więcej plików I / O Funkcje w standardowym io.h. 357 00:18:12,730 --> 00:18:16,620 Ale będzie to prawdopodobnie ci rozpoczął pracę ze wskaźnikami plików. 358 00:18:16,620 --> 00:18:17,640 Jestem Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 To CS50. 360 00:18:19,750 --> 00:18:21,669