1 00:00:00,000 --> 00:00:00,494 2 00:00:00,494 --> 00:00:13,350 >> [MUZYKA GRA] 3 00:00:13,350 --> 00:00:14,080 >> ROB BOWDEN Cześć. 4 00:00:14,080 --> 00:00:17,550 Jestem Rob, i miejmy nadzieję, że To rozwiązanie pozwala umieścić 5 00:00:17,550 --> 00:00:19,600 na drodze do wyzdrowienia. 6 00:00:19,600 --> 00:00:22,700 Więc zaczynajmy. 7 00:00:22,700 --> 00:00:25,660 >> Widzimy, że od razu jesteśmy by upewnić się, że jesteśmy 8 00:00:25,660 --> 00:00:27,170 korzystając Odzyskaj poprawnie. 9 00:00:27,170 --> 00:00:31,490 Więc użycie powinno być coś tylko jak dot ukośnik odzyskać. 10 00:00:31,490 --> 00:00:35,500 >> Teraz mamy zamiar otworzyć oczekiwano Karta dot surowy plik. 11 00:00:35,500 --> 00:00:39,740 Widzimy tutaj, że używamy stała nazwa pliku raw podkreślenia, 12 00:00:39,740 --> 00:00:44,200 które tutaj mamy hash zdefiniowana jako karta dot surowy. 13 00:00:44,200 --> 00:00:45,030 OK. 14 00:00:45,030 --> 00:00:48,210 >> Więc musimy się upewnić, że pomyślnie otwarty bo jeśli 15 00:00:48,210 --> 00:00:51,150 nie, to powinniśmy ostrzec użytkownika. 16 00:00:51,150 --> 00:00:56,770 Ale zakładając, że nie jesteśmy teraz zamiar zadeklarować bufor o rozmiarze JPEG 17 00:00:56,770 --> 00:00:58,170 długość nazwy pliku. 18 00:00:58,170 --> 00:01:02,060 Więc to będzie bufor jedziemy do sprintf do. 19 00:01:02,060 --> 00:01:04,360 >> Tak więc to, co jest długość nazwy pliku JPEG? 20 00:01:04,360 --> 00:01:08,490 Tutaj widzimy, że jest to hash zdefiniowane jako osiem. 21 00:01:08,490 --> 00:01:10,670 Więc dlaczego osiem? 22 00:01:10,670 --> 00:01:15,150 Dobrze dany plik zostanie nazwany coś jak zero zero zero. 23 00:01:15,150 --> 00:01:19,460 JPG i wtedy musimy odwrotny ukośnik zera. 24 00:01:19,460 --> 00:01:22,720 Więc musimy bufor, który może przechowywać osiem znaków. 25 00:01:22,720 --> 00:01:25,190 Teraz będziemy mieć licznik, który jest będzie śledzić 26 00:01:25,190 --> 00:01:27,780 Numer JPEG znaleźliśmy. 27 00:01:27,780 --> 00:01:31,590 >> I wreszcie będziemy mieć Plik JPEG, który jest początkowo wartość null 28 00:01:31,590 --> 00:01:35,920 który będzie obecnie otworzyć pliku, że piszemy do. 29 00:01:35,920 --> 00:01:37,540 Teraz będziemy mieć dodatkowy bufor. 30 00:01:37,540 --> 00:01:41,350 To nie jest taki sam jak nasz sprintf bufor w którym bufor jest jedna 31 00:01:41,350 --> 00:01:45,020 które czytamy w danych z karty dot surowy. 32 00:01:45,020 --> 00:01:48,900 >> Tak więc bufor będzie mieć niepodpisane znaków, które można 33 00:01:48,900 --> 00:01:53,560 w zasadzie tylko traktują nas bajtów, a to będzie od wielkości rozmiaru bloku 34 00:01:53,560 --> 00:01:57,950 gdzie, jak ci powiem, rozmiar bloku jest 512. 35 00:01:57,950 --> 00:02:03,070 Więc JPEG można traktować wszystko jako bloki 512 bajtów. 36 00:02:03,070 --> 00:02:05,890 >> Teraz jedziemy do pętli w całym pliku. 37 00:02:05,890 --> 00:02:12,980 Jedziemy do f przeczytać w naszym buforze pojedynczy razy rozmiar bloku z bajt 38 00:02:12,980 --> 00:02:14,710 Karta dot surowy plik. 39 00:02:14,710 --> 00:02:16,630 Teraz to, co ma f czytaj wrócić? 40 00:02:16,630 --> 00:02:20,050 Zwraca liczbę elementów że z powodzeniem czytać. 41 00:02:20,050 --> 00:02:27,310 Tak więc, jeśli udało mu się przeczytać 512 bajtów, a następnie chcemy, aby zobaczyć, czy jest to 42 00:02:27,310 --> 00:02:29,700 JPEG lub zapisać go do pliku JPEG. 43 00:02:29,700 --> 00:02:34,450 I jeśli nie zwróci 512 bajtów, wówczas plik zakończył się 44 00:02:34,450 --> 00:02:37,870 wówczas będziemy wyrwać się z r pętla, lub są jakieś błędy 45 00:02:37,870 --> 00:02:40,300 W takim przypadku będziemy również przełamać pętla r, ale chcemy, aby to zgłosić 46 00:02:40,300 --> 00:02:41,990 , że coś poszło nie tak. 47 00:02:41,990 --> 00:02:42,290 >> OK. 48 00:02:42,290 --> 00:02:47,630 Tak więc przy założeniu, że udało nam się odczytać w 512 bajtach, chcemy najpierw sprawdzić 49 00:02:47,630 --> 00:02:53,070 zrobić, że te bajty, że tylko czytać rozpocząć JPEG. 50 00:02:53,070 --> 00:02:56,430 Więc jeśli jest JPEG nagłówek naszego bufora. 51 00:02:56,430 --> 00:02:58,460 Teraz to, co robi nagłówek JPEG? 52 00:02:58,460 --> 00:03:00,120 Spójrzmy. 53 00:03:00,120 --> 00:03:05,270 >> Tutaj widzimy, że funkcja ta jest powrót na byka, a byk - 54 00:03:05,270 --> 00:03:08,820 dobrze tutaj, my sprawdzamy, czy Nagłówek zera równa tej stałej i 55 00:03:08,820 --> 00:03:11,880 Nagłówek jeden równa tej stałej i Nagłówek dwa równa tej stałej, 56 00:03:11,880 --> 00:03:15,640 Nagłówek trzy równa się to lub to stała, gdzie są te wszystkie stałe 57 00:03:15,640 --> 00:03:20,340 tylko hash zdefiniowane tu i są dokładnie to, co mówiłem w specyfikacji 58 00:03:20,340 --> 00:03:22,700 że JPEG zaczyna się. 59 00:03:22,700 --> 00:03:27,300 A więc ta funkcja jest po prostu będzie return true jeśli bufor stanowi 60 00:03:27,300 --> 00:03:31,750 Rozpoczęcie nowego JPEG false w przeciwnym wypadku. 61 00:03:31,750 --> 00:03:32,520 >> OK. 62 00:03:32,520 --> 00:03:38,490 Więc jeśli to nie stanowią nowy JPEG, wtedy najpierw chcą sprawdzić, czy 63 00:03:38,490 --> 00:03:42,030 Plik JPEG nie jest równa null, W takim przypadku możemy ją zamknąć. 64 00:03:42,030 --> 00:03:44,940 A więc dlaczego musimy sprawdzić aby sprawdzić, czy to nie jest wartość null? 65 00:03:44,940 --> 00:03:48,980 Bardzo dobrze, że mamy pierwszą JPEG znaleźć nie będziemy już mieć 66 00:03:48,980 --> 00:03:50,440 otwarty plik JPEG. 67 00:03:50,440 --> 00:03:55,580 I tak, jeśli staramy się zamknąć, wtedy nie robimy coś rację. 68 00:03:55,580 --> 00:03:59,090 >> Ale każdy kolejny JPEG że otwieramy chcemy zamknąć 69 00:03:59,090 --> 00:04:00,710 poprzedni plik. 70 00:04:00,710 --> 00:04:04,630 Więc teraz mamy zamiar używać sprintf jak my powiedział przed gdzie używamy 71 00:04:04,630 --> 00:04:06,280 nazwa pliku bufora JPEG. 72 00:04:06,280 --> 00:04:09,870 I będziemy korzystać z pliku JPEG nazwa formatu jak nasz formacie. 73 00:04:09,870 --> 00:04:12,030 A co to jest? 74 00:04:12,030 --> 00:04:18,450 Tutaj widzimy, że jest to procent od zera 3D.JPEG gdzie trzy zero tylko 75 00:04:18,450 --> 00:04:22,089 mówi, że będziemy korzystać z trzech liczb całkowitych za to dopełnione zerami. 76 00:04:22,089 --> 00:04:27,470 Tak to jest jak dostaniemy zero zero one.JPEG i zero 10.JPEG i tak dalej. 77 00:04:27,470 --> 00:04:29,060 >> Zamierzamy użyć sprintf. 78 00:04:29,060 --> 00:04:33,760 I całkowitą, że jesteśmy wstawienie w ciąg jest zdrętwiałe JPEG 79 00:04:33,760 --> 00:04:36,380 odzyskane, który jest początkowo zero. 80 00:04:36,380 --> 00:04:39,950 Więc pierwszy plik będzie otwarty wynosi zero zero zero kropka JPEG. 81 00:04:39,950 --> 00:04:43,330 A potem mamy to tak zwiększany następny plik otwieramy będzie zero zero 82 00:04:43,330 --> 00:04:46,830 jedna kropka JPEG, a my go zwiększyć ponownie, więc to będzie kropka zero zero dwa 83 00:04:46,830 --> 00:04:49,100 JPEG i tak dalej. 84 00:04:49,100 --> 00:04:49,850 >> Dobrze. 85 00:04:49,850 --> 00:04:53,210 Teraz wewnątrz pliku JPEG nazwa, mamy nazwę 86 00:04:53,210 --> 00:04:54,990 plik, który chcemy. 87 00:04:54,990 --> 00:04:58,640 Możemy f otworzyć dany plik na piśmie. 88 00:04:58,640 --> 00:04:59,170 OK. 89 00:04:59,170 --> 00:05:02,820 I po raz kolejny, musimy sprawdzić, Upewnij się, że plik z powodzeniem 90 00:05:02,820 --> 00:05:08,460 otwarte ponieważ jeśli tak nie jest, tam był jakiś błąd. 91 00:05:08,460 --> 00:05:13,100 >> Teraz staliśmy przeszłości jest to część JPEG. 92 00:05:13,100 --> 00:05:16,390 I tutaj widzimy, będziemy do zapisu w formacie JPEG. 93 00:05:16,390 --> 00:05:20,980 Ale najpierw trzeba ten test, który mówi jeśli plik JPEG nie jest równy null. 94 00:05:20,980 --> 00:05:22,490 Po co nam to? 95 00:05:22,490 --> 00:05:28,020 Oraz plik JPEG jest równa wartości null, gdy obecnie mają otwartą JPEG. 96 00:05:28,020 --> 00:05:31,870 >> Co zrobić, jeśli karta zaczyna surowe kropka z kilka bajtów 97 00:05:31,870 --> 00:05:33,510 nie stanowią JPEG? 98 00:05:33,510 --> 00:05:36,240 Wtedy będziemy chcieli pominąć tych bajtów. 99 00:05:36,240 --> 00:05:39,600 Jeśli nie mamy tego wyboru, to jesteśmy zamiar napisać do nieotwarte 100 00:05:39,600 --> 00:05:45,540 plik pierwszych 512 bajtów Karta, która nie jest dobra. 101 00:05:45,540 --> 00:05:46,030 OK. 102 00:05:46,030 --> 00:05:51,330 >> Tak więc zakładając, mamy otwarty plik, a następnie będziemy pisać do tego pliku 103 00:05:51,330 --> 00:05:53,290 512 bajtów, które mamy w naszym buforze. 104 00:05:53,290 --> 00:05:57,390 I po raz kolejny mamy do sprawdzenia upewnić się, że z powodzeniem 512 bajtów 105 00:05:57,390 --> 00:06:01,140 zostały napisane, bo gdyby nie były pomyślnie zapisane, to coś 106 00:06:01,140 --> 00:06:02,080 poszło nie tak. 107 00:06:02,080 --> 00:06:06,540 Będziemy zamykać pliki, drukować, że coś poszło nie tak, i powrót. 108 00:06:06,540 --> 00:06:10,940 Zakładając, że wszystko pójdzie dobrze, to będziemy trzymać zamknięcie pętli 109 00:06:10,940 --> 00:06:15,060 stary plik, otwierając nowy plik, pisanie danych do nowego pliku, a więc 110 00:06:15,060 --> 00:06:20,990 aż wreszcie ten f odczytu zwraca zero, która oznacza 111 00:06:20,990 --> 00:06:23,280 że plik jest zrobione. 112 00:06:23,280 --> 00:06:28,490 >> Więc teraz, że czytanie kart jest ponad, my zobaczyć, że jedziemy do f zamknąć 113 00:06:28,490 --> 00:06:33,250 ostatni plik, który mieliśmy otwarte, ale sprawdzamy, czy plik JPEG 114 00:06:33,250 --> 00:06:34,900 nie równa null. 115 00:06:34,900 --> 00:06:39,520 Oraz f blisko sens, bo jak mamy do otwierania plików, zamykamy 116 00:06:39,520 --> 00:06:43,870 poprzedni plik, ale bardzo ostatnio że otwarty plik nie zostanie zamknięty. 117 00:06:43,870 --> 00:06:45,580 Więc to jest to, co ten robi. 118 00:06:45,580 --> 00:06:47,720 >> Ale dlaczego musimy sprawdzić wartość null? 119 00:06:47,720 --> 00:06:53,130 No i co, jeśli karta nie kropka surowy mają jeden JPEG w jej wnętrzu? 120 00:06:53,130 --> 00:06:56,640 W takim przypadku musielibyśmy nigdy nie otworzył plik. 121 00:06:56,640 --> 00:07:00,230 A jeśli nie możemy otworzyć plik, powinniśmy nie spróbować zamknąć ten plik. 122 00:07:00,230 --> 00:07:03,000 Więc to, co robi ten test. 123 00:07:03,000 --> 00:07:07,880 >> Teraz tutaj, jak powiedziałem wcześniej, moglibyśmy złamał się, że Y pętlę albo jeśli 124 00:07:07,880 --> 00:07:13,520 Karta została zakończona lub istnieją jakiś błąd odczytu z karty. 125 00:07:13,520 --> 00:07:16,680 Więc to jest sprawdzenie, czy nie było błąd odczytu z karty, w 126 00:07:16,680 --> 00:07:19,400 takim przypadku, my nie mówią był błąd odczytu. 127 00:07:19,400 --> 00:07:22,130 Nie chcemy myśleć użytkownika wszystko poszło pomyślnie. 128 00:07:22,130 --> 00:07:24,750 I wrócimy jednego błędu. 129 00:07:24,750 --> 00:07:29,580 >> Wreszcie, my f zamknąć nasz surowy plik, nasza karta kropki surowe, aby wskazać, że 130 00:07:29,580 --> 00:07:34,070 wszystko poszło dobrze i powrót zera i to jest to. 131 00:07:34,070 --> 00:07:36,130 >> Nazywam się Rob i to było odzyskać. 132 00:07:36,130 --> 00:07:42,102 >> [MUZYKA GRA]