[음악 연주] ZAMYLA CHAN : 복구의 태클 보자. 복구는 아마 내가 제일 좋아하는 PSET입니다, 주로 나는 생각하기 때문에 정말, 정말 멋지다. 기본적으로, 당신은 메모리를 제공하고 카드 파일되는 사진이 삭제되었습니다. 그러나 당신이에 갈거야 할 그들 모두를 복구 할 수 있습니다. OK. 그래서 어쩌면 정말 흥분하지만, 당신이이기 때문에, 약간의 협박 빈 C 파일과 관련 당신은 그것을 기입 수있다 OK, 그래서이 휴식 할 관리 부분으로. 당신은 열려 있습니다 메모리 카드의 파일. 간단한데. 그 다음, 시작을 찾아 JPG 이미지. 이 메모리의 모든 파일 카드는 JPG를 할 것입니다. 그런 다음, 한 번 당신이 시작을 찾을 수 당신은 새로운 JPG를 열거야 그 같은, JPG를 만들고, 512를 기록 새로운 JPG 때까지 한번에 바이트 발견하고 프로그램을 종료 한 번 이 파일의 끝을 검출한다. 그래서 첫 번째 단계는 첫 번째 열 수 있습니다 메모리 카드 파일. 하지만 당신은 이미이 사실을 알고, 그리고 거기에 에 무슨 파일 I / O 기능 매우 유용. OK. 그래서 JPG 파일은 무엇입니까? 우리는 처음에 그것을 필요로하기 때문이다. 음, JPG를, 단지 비트 맵 등, 단순한 바이트 시퀀스입니다. 다행히, 모든 JPG는 하나와 함께 시작 를 0xFF, 0xd8, 0xff가, 0xe0, 하나의 시퀀스 바이트 또는 다른 바이트 순서. 그래서 그 4 바이트 표시 JPG의 시작. 그 두 가지의 조합이 아닌 다른 없음 4 바이트의. 그리고 다행히 우리를 위해, 또 다른 사실 우리 을 활용할 수 있습니다 것은 그 모든 JPG는 나란히 저장 메모리 카드. I는의 구조를 나타낸 것 개략적으로 여기에 메모리 카드 여기에 밀어 넣습니다. 여기에, 모든 광장, 모든 사각형, 바이트 (512)를 나타내며, 그것은 시작 우리가하지 않는 점에서 회색 정말 JPG 있습니다. 하지만 우리는 마침내 충돌 스타와 함께 블록. 즉, 즉, 처음 4 바이트 중 그 중 512은 그 두 가지 중 하나입니다 JPG의 시퀀스를 시작. 그리고 우리는 한 다음 거기에서 가서, 하나 JPG는 다음 중 하나가 시작, 종료됩니다. 우리는 지금 더 이상 필요가 없습니다 그 사이 회색 공간. 하지만 어떻게 우리가 실제로이를 읽고 않는다 우리가 할 수 있도록 512 바이트를 읽고 비교 첫 번째 장소? 그럼, 다시 FREAD으로 이동시킨 포함 할 구조체에 소요 당신이 읽고있는 바이트. 그래서 당신은 둘거야 거기에 그 - 크기, 개수, 다음 inpointer 당신은에서 읽고있다. 이제, 우리는 한 번에 512를 읽고 싶어하고, 우리는 버퍼에이를 저장하려면, 나는 그것을 호출하는거야. 기본적으로, 우리는 개최 할 예정입니다 그 512 바이트 상, 놀거리와 그것으로 일, 오른쪽? 우리는 하나를 먼저 비교하는거야 4 바이트, 또는 우리가 갈거야 OK, 그것을 읽어? 그럼 데이터 포인터는 것 당신의 완충 역할을하고, inpointer, 음, 그건 그냥 무슨 메모리 카드이어야합니다. 우리의 메모리 카드 회로도에 백업합니다. 우리는 한 번에 512 바이트를 읽을거야, 모든 512 바이트 블록을 수납 버퍼에 들고 그 위에 우리가 알 때까지, 그 512 바이트 버퍼 정확히 무엇을하세요. 그래서 시작은 아무것도 아니다, 그래서 우리는, 버퍼 판독을 비교하고, 거 우리는 아무것도 할 필요가 없습니다. 그리고, 우리는 마침내 별을 명중 우리가했습니다 것을 의미 차단 우리의 첫 번째 JPG를 발견했다. 그래서 버퍼는 현재 보유 그 JPG의 바이트. 그들이있어 512 바이트, 때문에 다음에 하지 성 블록도 있습니다 그 JPG의 일부. 그리고 JPG를 거기에서 연속 에 우리는 다음 JPG을 칠 때까지합니다. 그리고, 버퍼는 보유 512이 JPG에 대한 바이트, 등등, 등등. OK. 첫 번째 별표를 누르십시오 그래서 일단 블록, 첫 번째 JPG, 당신은 어떻게 할 실제로, 음, 열? 의 새로운 JPG를 만들어 보자. JPG의 파일 이름에 가고있다 형식이어야, 번호, 번호, number.jpg, 점에서 그들은에서 이름입니다 이들이 발견 된 순서대로, 0에서 시작. 그래서 첫 번째 JPG 당신 온라인 예약 000.JPG됩니다. 그래서, 좋은 생각을 추적하는 지금까지 발견했습니다 얼마나 많은 JPG 파일. 그래서 파일 이름입니다. 그러나 당신은 어떻게 실제로 어떻게해야합니까? 글쎄, 우리가 사용하는거야 함수는 sprintf를했다. printf와 유사한 조금, 어디 당신은 문자열에 대한 자리 표시자를 사용할 수 있습니다 이 경우를 제외하고, sprintf를 인쇄합니다 현재로 파일 중 디렉토리가 아닌 단자에. OK. 그래서 여기에 우리는 우리가 타이틀을 가지고 참조 저장할 문자 배열 결과 문자열, 우리는 전달 와 실제 문자열의 제목 자리 표시 자, 그냥 우리는 것 같은 printf와 함께 할 수 배웠습니다. 하지만 여기있는이 코드 2.JPG하지 002.JPG을 줄 것이다. 그래서 난 알아 당신에게 떠날거야 방법 확인하기 위해 자리를 수정 정확한 이름. OK. 그래서 한 번 당신은 당신이 할 수있는 다음 sprintf'd했습니다 이 존재하기 때문에, 해당 파일을 엽니 다 fopen을 사용하여 디렉토리를 사용하여 제목, 그리고 당신이 원하는 그 다음 어떤 모드 안으로 해당 파일을 열 수 있습니다 그래서 지금 우리는 새로운 JPG 파일을 연 것으로, 지금 우리는 512 바이트를 쓸 수 있습니다 새 JPG가 발견 될 때까지의 시간. 그래서 다른 살펴 보자 fwrite는 구문에서. 나는이 슬라이드를 보여 드리는 것을 알고 많은,하지만 난 그냥 있는지 확인하려면 너희들은 너무 혼란스러워하지 않기 때문에 나는 그것이 매우 쉬운 것을 알고 첫 번째와 마지막을 혼합 인수, 특히. 하지만 당신은에서 작성하는 것을 기억 아웃 파일 이미지로 버퍼. 이제 당신이 알고있는 방법을 쓰기 512 당신했습니다 당신의 JPG 파일로 바이트 생성, 음, 우리는 그것을 중지하려면 우리는 말에 도달 한 과정을 한 번 우리 카드 때문에 없을 것 찾을 수있는 더 많은 이미지. 그럼 FREAD로 돌아 가자 한 번 더, 약속. FREAD 크기의 항목 수를 반환 크기는 성공적으로 준비가되어 있었다. 이상적이 될 것입니다 어떤 당신이 바로, 번호를 전달할? 당신은 수를 읽으려고하고 있기 때문에 크기, 사이즈의 요소. 그러나 FREAD는 읽을 수없는 경우 요소의 개수, 그것은 가야죠 성공적으로 읽어 어떤 수. 지금,주의 할 것은입니다 당신은 I / O 다른 파일을 사용하는 경우 는 fgetc 같은 함수는, 또한 가야죠 성공적으로 읽어 항목 수. 어떤이 기능에 대한 유용한 것은 당신은 내부 기능을 사용하는 경우 상태, 그것 자체를 실행하는 동안 거 는 조건을 결정하는 정말 유용합니다. 그래서 당신은이 조건이있는 경우에, 말, 경우 FREAD 버퍼를 sizeof 개, 2, 포인터는 1, 등호 것을 내가 읽고 싶은 것을 의미합니다 한 번에 2 개. 그러나 FREAD는 대신 2의 1을 반환하는 경우 예상, 즉이 있다는 것을 의미 개는 내 파일에 남아있는 것이 아니라 1. 그러나 2를 반환하는 경우, 다음, 나는 아직도이 내 버퍼의 내부에 그 2 개. 그래서 지금 당신에게 방법의 감각을 준다 파일의 끝을 확인하지만, 의 지금 논리를 통해 가자. 어떻게 우리가 실제로 모든 조각 않는다 함께 이러한 요소? 우리는 우리의 첫번째 JPG 충돌하면, 이후 우리는 JPG 파일이 저장되어있는 것을 알고 연속적으로, 우리가 될 때까지 기록 할 수 있습니다 우리는 카드 파일의 끝에 도달한다. 그러나 우리는 쓰고 싶지 않아 아무것도 그때까지. 그래서 우리가 걸뿐만 아니라, 중요한 새 JPG의 시작,하지만 여부 우리는 이미 JPG 또는하지를 발견했습니다. 그것은 새로운 JPG의 시작 경우에, 우리는거야 현재 JPG 파일의 경우를 닫으려면 우리는 오픈, 오픈이 에 쓸 수있는 새로운 하나. 그것은 새로운 JPG의 시작이 아니라면, 하지만, 우리는 같은 JPG 파일을 유지합니다 열고 그것으로 작성합니다. 우리는 어느에 우리의 버퍼를 쓸 것이다 우리는 열려있는 JPG 파일 것을 제공 우리는 물론, 오픈있다. 우리는 우리의 첫번째 JPG를 찾을 수없는 경우 아직 우리는 아무것도 쓰지 않습니다. 그리고이 과정은 될 때까지 계속 카드 파일의 끝에 도달한다. 그리고 마지막으로, 당신은하고 싶은 것 당신이 어떤 FCLOSE 확인 당신이 fopened 한 파일. 당신은 편안 들어가면 개념 몇 가지를 살펴 내가 여기에 포함 된 한 의사. 먼저, 카드 파일을 열려면, 다음 다음과 같은 과정을 반복 당신이 도달 할 때까지 카드의 끝. 당신은 512 바이트를 읽으려면 버퍼에. 그 버퍼를 사용하여 확인하는 것이 좋습니다 당신은 시작에있어 여부 새로운 JPG 또는 없습니다. 그리고 그 질문에 대한 답변을드립니다 파일 관리에 영향을 미칠 - 하는 당신이 열려있는 파일, 어떤 사람들은 당신이 닫 않습니다. 그렇다면, 당신은 이미 JPG를 발견했다? 당신은 어떻게 유지하고있다 그 추적? 그런 다음, 그에 따라, 당신은 어느거야 현재 JPG에 쓸 당신 전혀 쓸 오픈하지 않았거나, 아직 JPG을 발견하지 않았기 때문에. 마지막으로, 한 번 당신은 말에 도달했습니다 파일, 당신은 어떤을 닫아야 할 것 당신이 열려있는 파일을 나머지. 우리는 여기에 깔끔합니다. 그리고 그와 함께, 당신은 모두 복구했습니다 그 메모리에서 누락 된 파일 꽤 놀라운 묘기 카드. 그래서 뒷면에 자신을 두드려. 그러나, 하나 이상의 요소가있다 콘테스트 PSET. 당신은 찾을 수 있습니다 그 모든 사진 당신이 복구 한 것을 실제로 CS50 직원의 사진. 그래서 당신은 캠퍼스에 또는 어딘가에 있다면 근처에, 당신은 함께 사진을 찍을 수 직원,이 부분 직원 대부분의 사진 자신의 복구 된 파일의 것 멋진 상을받을. 그것으로, 당신은 완료했습니다 PSET을 복구 할 수 있습니다. 내 이름은 Zamyla이며,이 CS50입니다.