1 00:00:00,000 --> 00:00:09,780 >> [음악 연주] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA CHAN : 복구의 태클 보자. 3 00:00:11,150 --> 00:00:14,030 복구는 아마 내가 제일 좋아하는 PSET입니다, 주로 나는 생각하기 때문에 4 00:00:14,030 --> 00:00:15,650 정말, 정말 멋지다. 5 00:00:15,650 --> 00:00:19,040 기본적으로, 당신은 메모리를 제공하고 카드 파일되는 6 00:00:19,040 --> 00:00:20,900 사진이 삭제되었습니다. 7 00:00:20,900 --> 00:00:23,650 그러나 당신이에 갈거야 할 그들 모두를 복구 할 수 있습니다. 8 00:00:23,650 --> 00:00:24,250 >> OK. 9 00:00:24,250 --> 00:00:28,230 그래서 어쩌면 정말 흥분하지만, 당신이이기 때문에, 약간의 협박 10 00:00:28,230 --> 00:00:32,430 빈 C 파일과 관련 당신은 그것을 기입 수있다 11 00:00:32,430 --> 00:00:36,250 OK, 그래서이 휴식 할 관리 부분으로. 12 00:00:36,250 --> 00:00:38,160 당신은 열려 있습니다 메모리 카드의 파일. 13 00:00:38,160 --> 00:00:39,900 간단한데. 14 00:00:39,900 --> 00:00:43,030 그 다음, 시작을 찾아 JPG 이미지. 15 00:00:43,030 --> 00:00:46,740 이 메모리의 모든 파일 카드는 JPG를 할 것입니다. 16 00:00:46,740 --> 00:00:50,840 그런 다음, 한 번 당신이 시작을 찾을 수 당신은 새로운 JPG를 열거야 그 17 00:00:50,840 --> 00:00:57,610 같은, JPG를 만들고, 512를 기록 새로운 JPG 때까지 한번에 바이트 18 00:00:57,610 --> 00:01:02,930 발견하고 프로그램을 종료 한 번 이 파일의 끝을 검출한다. 19 00:01:02,930 --> 00:01:06,400 >> 그래서 첫 번째 단계는 첫 번째 열 수 있습니다 메모리 카드 파일. 20 00:01:06,400 --> 00:01:09,850 하지만 당신은 이미이 사실을 알고, 그리고 거기에 에 무슨 파일 I / O 기능 21 00:01:09,850 --> 00:01:12,030 매우 유용. 22 00:01:12,030 --> 00:01:12,820 OK. 23 00:01:12,820 --> 00:01:14,760 그래서 JPG 파일은 무엇입니까? 24 00:01:14,760 --> 00:01:16,330 우리는 처음에 그것을 필요로하기 때문이다. 25 00:01:16,330 --> 00:01:21,310 음, JPG를, 단지 비트 맵 등, 단순한 바이트 시퀀스입니다. 26 00:01:21,310 --> 00:01:30,660 다행히, 모든 JPG는 하나와 함께 시작 를 0xFF, 0xd8, 0xff가, 0xe0, 하나의 시퀀스 27 00:01:30,660 --> 00:01:33,610 바이트 또는 다른 바이트 순서. 28 00:01:33,610 --> 00:01:37,250 >> 그래서 그 4 바이트 표시 JPG의 시작. 29 00:01:37,250 --> 00:01:40,780 그 두 가지의 조합이 아닌 다른 없음 4 바이트의. 30 00:01:40,780 --> 00:01:44,840 그리고 다행히 우리를 위해, 또 다른 사실 우리 을 활용할 수 있습니다 것은 그 모든 31 00:01:44,840 --> 00:01:48,550 JPG는 나란히 저장 메모리 카드. 32 00:01:48,550 --> 00:01:52,210 I는의 구조를 나타낸 것 개략적으로 여기에 메모리 카드 33 00:01:52,210 --> 00:01:53,310 여기에 밀어 넣습니다. 34 00:01:53,310 --> 00:01:59,270 여기에, 모든 광장, 모든 사각형, 바이트 (512)를 나타내며, 그것은 시작 35 00:01:59,270 --> 00:02:01,750 우리가하지 않는 점에서 회색 정말 JPG 있습니다. 36 00:02:01,750 --> 00:02:05,700 >> 하지만 우리는 마침내 충돌 스타와 함께 블록. 37 00:02:05,700 --> 00:02:10,940 즉, 즉, 처음 4 바이트 중 그 중 512은 그 두 가지 중 하나입니다 38 00:02:10,940 --> 00:02:13,230 JPG의 시퀀스를 시작. 39 00:02:13,230 --> 00:02:17,340 그리고 우리는 한 다음 거기에서 가서, 하나 JPG는 다음 중 하나가 시작, 종료됩니다. 40 00:02:17,340 --> 00:02:20,990 우리는 지금 더 이상 필요가 없습니다 그 사이 회색 공간. 41 00:02:20,990 --> 00:02:25,550 >> 하지만 어떻게 우리가 실제로이를 읽고 않는다 우리가 할 수 있도록 512 바이트를 읽고 42 00:02:25,550 --> 00:02:27,500 비교 첫 번째 장소? 43 00:02:27,500 --> 00:02:33,470 그럼, 다시 FREAD으로 이동시킨 포함 할 구조체에 소요 44 00:02:33,470 --> 00:02:34,470 당신이 읽고있는 바이트. 45 00:02:34,470 --> 00:02:36,570 그래서 당신은 둘거야 거기에 그 - 46 00:02:36,570 --> 00:02:42,192 크기, 개수, 다음 inpointer 당신은에서 읽고있다. 47 00:02:42,192 --> 00:02:49,900 이제, 우리는 한 번에 512를 읽고 싶어하고, 우리는 버퍼에이를 저장하려면, 48 00:02:49,900 --> 00:02:50,700 나는 그것을 호출하는거야. 49 00:02:50,700 --> 00:02:54,100 >> 기본적으로, 우리는 개최 할 예정입니다 그 512 바이트 상, 놀거리와 50 00:02:54,100 --> 00:02:55,500 그것으로 일, 오른쪽? 51 00:02:55,500 --> 00:02:58,260 우리는 하나를 먼저 비교하는거야 4 바이트, 또는 우리가 갈거야 52 00:02:58,260 --> 00:02:59,830 OK, 그것을 읽어? 53 00:02:59,830 --> 00:03:05,050 그럼 데이터 포인터는 것 당신의 완충 역할을하고, 54 00:03:05,050 --> 00:03:07,745 inpointer, 음, 그건 그냥 무슨 메모리 카드이어야합니다. 55 00:03:07,745 --> 00:03:09,500 >> 우리의 메모리 카드 회로도에 백업합니다. 56 00:03:09,500 --> 00:03:14,690 우리는 한 번에 512 바이트를 읽을거야, 모든 512 바이트 블록을 수납 57 00:03:14,690 --> 00:03:19,190 버퍼에 들고 그 위에 우리가 알 때까지, 그 512 바이트 버퍼 58 00:03:19,190 --> 00:03:22,000 정확히 무엇을하세요. 59 00:03:22,000 --> 00:03:25,960 그래서 시작은 아무것도 아니다, 그래서 우리는, 버퍼 판독을 비교하고, 거 60 00:03:25,960 --> 00:03:28,160 우리는 아무것도 할 필요가 없습니다. 61 00:03:28,160 --> 00:03:32,030 그리고, 우리는 마침내 별을 명중 우리가했습니다 것을 의미 차단 62 00:03:32,030 --> 00:03:33,630 우리의 첫 번째 JPG를 발견했다. 63 00:03:33,630 --> 00:03:36,560 그래서 버퍼는 현재 보유 그 JPG의 바이트. 64 00:03:36,560 --> 00:03:40,220 >> 그들이있어 512 바이트, 때문에 다음에 하지 성 블록도 있습니다 65 00:03:40,220 --> 00:03:41,740 그 JPG의 일부. 66 00:03:41,740 --> 00:03:47,630 그리고 JPG를 거기에서 연속 에 우리는 다음 JPG을 칠 때까지합니다. 67 00:03:47,630 --> 00:03:51,880 그리고, 버퍼는 보유 512이 JPG에 대한 바이트, 68 00:03:51,880 --> 00:03:53,580 등등, 등등. 69 00:03:53,580 --> 00:03:54,250 OK. 70 00:03:54,250 --> 00:03:58,980 >> 첫 번째 별표를 누르십시오 그래서 일단 블록, 첫 번째 JPG, 당신은 어떻게 할 71 00:03:58,980 --> 00:04:01,910 실제로, 음, 열? 72 00:04:01,910 --> 00:04:04,990 의 새로운 JPG를 만들어 보자. 73 00:04:04,990 --> 00:04:08,846 JPG의 파일 이름에 가고있다 형식이어야, 번호, 번호, 74 00:04:08,846 --> 00:04:13,830 number.jpg, 점에서 그들은에서 이름입니다 이들이 발견 된 순서대로, 75 00:04:13,830 --> 00:04:14,780 0에서 시작. 76 00:04:14,780 --> 00:04:19,890 >> 그래서 첫 번째 JPG 당신 온라인 예약 000.JPG됩니다. 77 00:04:19,890 --> 00:04:26,560 그래서, 좋은 생각을 추적하는 지금까지 발견했습니다 얼마나 많은 JPG 파일. 78 00:04:26,560 --> 00:04:27,610 그래서 파일 이름입니다. 79 00:04:27,610 --> 00:04:29,660 그러나 당신은 어떻게 실제로 어떻게해야합니까? 80 00:04:29,660 --> 00:04:34,310 글쎄, 우리가 사용하는거야 함수는 sprintf를했다. 81 00:04:34,310 --> 00:04:38,260 printf와 유사한 조금, 어디 당신은 문자열에 대한 자리 표시자를 사용할 수 있습니다 82 00:04:38,260 --> 00:04:42,420 이 경우를 제외하고, sprintf를 인쇄합니다 현재로 파일 중 83 00:04:42,420 --> 00:04:45,550 디렉토리가 아닌 단자에. 84 00:04:45,550 --> 00:04:46,120 >> OK. 85 00:04:46,120 --> 00:04:49,950 그래서 여기에 우리는 우리가 타이틀을 가지고 참조 저장할 문자 배열 86 00:04:49,950 --> 00:04:55,120 결과 문자열, 우리는 전달 와 실제 문자열의 제목 87 00:04:55,120 --> 00:04:58,720 자리 표시 자, 그냥 우리는 것 같은 printf와 함께 할 수 배웠습니다. 88 00:04:58,720 --> 00:05:05,530 하지만 여기있는이 코드 2.JPG하지 002.JPG을 줄 것이다. 89 00:05:05,530 --> 00:05:09,920 그래서 난 알아 당신에게 떠날거야 방법 확인하기 위해 자리를 수정 90 00:05:09,920 --> 00:05:11,920 정확한 이름. 91 00:05:11,920 --> 00:05:12,610 >> OK. 92 00:05:12,610 --> 00:05:17,390 그래서 한 번 당신은 당신이 할 수있는 다음 sprintf'd했습니다 이 존재하기 때문에, 해당 파일을 엽니 다 93 00:05:17,390 --> 00:05:22,690 fopen을 사용하여 디렉토리를 사용하여 제목, 그리고 당신이 원하는 그 다음 어떤 모드 94 00:05:22,690 --> 00:05:25,140 안으로 해당 파일을 열 수 있습니다 95 00:05:25,140 --> 00:05:30,260 그래서 지금 우리는 새로운 JPG 파일을 연 것으로, 지금 우리는 512 바이트를 쓸 수 있습니다 96 00:05:30,260 --> 00:05:33,320 새 JPG가 발견 될 때까지의 시간. 97 00:05:33,320 --> 00:05:36,640 그래서 다른 살펴 보자 fwrite는 구문에서. 98 00:05:36,640 --> 00:05:40,060 >> 나는이 슬라이드를 보여 드리는 것을 알고 많은,하지만 난 그냥 있는지 확인하려면 99 00:05:40,060 --> 00:05:43,530 너희들은 너무 혼란스러워하지 않기 때문에 나는 그것이 매우 쉬운 것을 알고 100 00:05:43,530 --> 00:05:47,000 첫 번째와 마지막을 혼합 인수, 특히. 101 00:05:47,000 --> 00:05:54,390 하지만 당신은에서 작성하는 것을 기억 아웃 파일 이미지로 버퍼. 102 00:05:54,390 --> 00:05:59,250 >> 이제 당신이 알고있는 방법을 쓰기 512 당신했습니다 당신의 JPG 파일로 바이트 103 00:05:59,250 --> 00:06:03,230 생성, 음, 우리는 그것을 중지하려면 우리는 말에 도달 한 과정을 한 번 104 00:06:03,230 --> 00:06:06,720 우리 카드 때문에 없을 것 찾을 수있는 더 많은 이미지. 105 00:06:06,720 --> 00:06:10,760 그럼 FREAD로 돌아 가자 한 번 더, 약속. 106 00:06:10,760 --> 00:06:15,600 FREAD 크기의 항목 수를 반환 크기는 성공적으로 준비가되어 있었다. 107 00:06:15,600 --> 00:06:19,440 이상적이 될 것입니다 어떤 당신이 바로, 번호를 전달할? 108 00:06:19,440 --> 00:06:24,140 당신은 수를 읽으려고하고 있기 때문에 크기, 사이즈의 요소. 109 00:06:24,140 --> 00:06:29,380 그러나 FREAD는 읽을 수없는 경우 요소의 개수, 그것은 가야죠 110 00:06:29,380 --> 00:06:32,530 성공적으로 읽어 어떤 수. 111 00:06:32,530 --> 00:06:36,310 >> 지금,주의 할 것은입니다 당신은 I / O 다른 파일을 사용하는 경우 112 00:06:36,310 --> 00:06:43,860 는 fgetc 같은 함수는, 또한 가야죠 성공적으로 읽어 항목 수. 113 00:06:43,860 --> 00:06:48,000 어떤이 기능에 대한 유용한 것은 당신은 내부 기능을 사용하는 경우 114 00:06:48,000 --> 00:06:53,190 상태, 그것 자체를 실행하는 동안 거 는 조건을 결정하는 115 00:06:53,190 --> 00:06:54,340 정말 유용합니다. 116 00:06:54,340 --> 00:07:00,440 그래서 당신은이 조건이있는 경우에, 말, 경우 FREAD 버퍼를 sizeof 개, 2, 117 00:07:00,440 --> 00:07:04,870 포인터는 1, 등호 것을 내가 읽고 싶은 것을 의미합니다 118 00:07:04,870 --> 00:07:06,540 한 번에 2 개. 119 00:07:06,540 --> 00:07:13,490 그러나 FREAD는 대신 2의 1을 반환하는 경우 예상, 즉이 있다는 것을 의미 120 00:07:13,490 --> 00:07:16,480 개는 내 파일에 남아있는 것이 아니라 1. 121 00:07:16,480 --> 00:07:22,450 그러나 2를 반환하는 경우, 다음, 나는 아직도이 내 버퍼의 내부에 그 2 개. 122 00:07:22,450 --> 00:07:26,280 >> 그래서 지금 당신에게 방법의 감각을 준다 파일의 끝을 확인하지만, 123 00:07:26,280 --> 00:07:28,940 의 지금 논리를 통해 가자. 124 00:07:28,940 --> 00:07:32,460 어떻게 우리가 실제로 모든 조각 않는다 함께 이러한 요소? 125 00:07:32,460 --> 00:07:36,880 우리는 우리의 첫번째 JPG 충돌하면, 이후 우리는 JPG 파일이 저장되어있는 것을 알고 126 00:07:36,880 --> 00:07:40,910 연속적으로, 우리가 될 때까지 기록 할 수 있습니다 우리는 카드 파일의 끝에 도달한다. 127 00:07:40,910 --> 00:07:43,950 그러나 우리는 쓰고 싶지 않아 아무것도 그때까지. 128 00:07:43,950 --> 00:07:48,710 그래서 우리가 걸뿐만 아니라, 중요한 새 JPG의 시작,하지만 여부 129 00:07:48,710 --> 00:07:50,655 우리는 이미 JPG 또는하지를 발견했습니다. 130 00:07:50,655 --> 00:07:55,390 >> 그것은 새로운 JPG의 시작 경우에, 우리는거야 현재 JPG 파일의 경우를 닫으려면 131 00:07:55,390 --> 00:07:59,110 우리는 오픈, 오픈이 에 쓸 수있는 새로운 하나. 132 00:07:59,110 --> 00:08:03,340 그것은 새로운 JPG의 시작이 아니라면, 하지만, 우리는 같은 JPG 파일을 유지합니다 133 00:08:03,340 --> 00:08:05,910 열고 그것으로 작성합니다. 134 00:08:05,910 --> 00:08:10,100 우리는 어느에 우리의 버퍼를 쓸 것이다 우리는 열려있는 JPG 파일 것을 제공 135 00:08:10,100 --> 00:08:12,120 우리는 물론, 오픈있다. 136 00:08:12,120 --> 00:08:16,190 우리는 우리의 첫번째 JPG를 찾을 수없는 경우 아직 우리는 아무것도 쓰지 않습니다. 137 00:08:16,190 --> 00:08:20,290 그리고이 과정은 될 때까지 계속 카드 파일의 끝에 도달한다. 138 00:08:20,290 --> 00:08:23,410 >> 그리고 마지막으로, 당신은하고 싶은 것 당신이 어떤 FCLOSE 확인 139 00:08:23,410 --> 00:08:25,800 당신이 fopened 한 파일. 140 00:08:25,800 --> 00:08:28,360 당신은 편안 들어가면 개념 몇 가지를 살펴 141 00:08:28,360 --> 00:08:30,840 내가 여기에 포함 된 한 의사. 142 00:08:30,840 --> 00:08:34,830 먼저, 카드 파일을 열려면, 다음 다음과 같은 과정을 반복 143 00:08:34,830 --> 00:08:37,144 당신이 도달 할 때까지 카드의 끝. 144 00:08:37,144 --> 00:08:40,880 당신은 512 바이트를 읽으려면 버퍼에. 145 00:08:40,880 --> 00:08:43,934 그 버퍼를 사용하여 확인하는 것이 좋습니다 당신은 시작에있어 여부 146 00:08:43,934 --> 00:08:45,300 새로운 JPG 또는 없습니다. 147 00:08:45,300 --> 00:08:48,400 그리고 그 질문에 대한 답변을드립니다 파일 관리에 영향을 미칠 - 148 00:08:48,400 --> 00:08:51,940 하는 당신이 열려있는 파일, 어떤 사람들은 당신이 닫 않습니다. 149 00:08:51,940 --> 00:08:55,220 >> 그렇다면, 당신은 이미 JPG를 발견했다? 150 00:08:55,220 --> 00:08:57,740 당신은 어떻게 유지하고있다 그 추적? 151 00:08:57,740 --> 00:09:01,735 그런 다음, 그에 따라, 당신은 어느거야 현재 JPG에 쓸 당신 152 00:09:01,735 --> 00:09:07,090 전혀 쓸 오픈하지 않았거나, 아직 JPG을 발견하지 않았기 때문에. 153 00:09:07,090 --> 00:09:10,870 마지막으로, 한 번 당신은 말에 도달했습니다 파일, 당신은 어떤을 닫아야 할 것 154 00:09:10,870 --> 00:09:12,590 당신이 열려있는 파일을 나머지. 155 00:09:12,590 --> 00:09:14,590 우리는 여기에 깔끔합니다. 156 00:09:14,590 --> 00:09:18,790 >> 그리고 그와 함께, 당신은 모두 복구했습니다 그 메모리에서 누락 된 파일 157 00:09:18,790 --> 00:09:21,620 꽤 놀라운 묘기 카드. 158 00:09:21,620 --> 00:09:23,430 그래서 뒷면에 자신을 두드려. 159 00:09:23,430 --> 00:09:27,560 그러나, 하나 이상의 요소가있다 콘테스트 PSET. 160 00:09:27,560 --> 00:09:30,920 당신은 찾을 수 있습니다 그 모든 사진 당신이 복구 한 것을 실제로 161 00:09:30,920 --> 00:09:32,820 CS50 직원의 사진. 162 00:09:32,820 --> 00:09:38,500 그래서 당신은 캠퍼스에 또는 어딘가에 있다면 근처에, 당신은 함께 사진을 찍을 수 163 00:09:38,500 --> 00:09:42,600 직원,이 부분 직원 대부분의 사진 164 00:09:42,600 --> 00:09:46,940 자신의 복구 된 파일의 것 멋진 상을받을. 165 00:09:46,940 --> 00:09:50,650 그것으로, 당신은 완료했습니다 PSET을 복구 할 수 있습니다. 166 00:09:50,650 --> 00:09:53,600 내 이름은 Zamyla이며,이 CS50입니다. 167 00:09:53,600 --> 00:10:01,835