1 00:00:00,000 --> 00:00:09,780 >> [音楽再生] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLAちゃん回復のタックルましょう。 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と、1列 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 これらの2つの組み合わせにほかならない 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 私はの構造を表現しました これについて概略的にメモリカード 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は、これら2つのうちの1つである 38 00:02:10,940 --> 00:02:13,230 JPGのシーケンスを開始する。 39 00:02:13,230 --> 00:02:17,340 そして、我々はかつて、そこから移動し、 1 JPGが終了すると、次の1が開始されます。 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 した後、緩衝液を保持している そのJPGのための512バイト、 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 番号。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 そこでここでは、我々はタイトルを持っていることがわかり、 格納するchar配列 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 >> 私はこのスライドAを示すてることを知っている 多くが、私はちょうどことを確認するには 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 しかし、あなたから書いていることを覚えておいてください outファイルイメージに、バッファー。 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は1ではなく2などを返す場合 予想される、すなわち2があることを意味 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 我々は1開いて、[開く​​]を持っている に書き込むための1。 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 我々はもちろん、1開いている。 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 しかし、1つ以上の要素があります コンテストです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