[音楽再生] ZAMYLAちゃん回復のタックルましょう。 回復は、おそらく私のお気に入りPSETで、 そして私はそれがだと思う主な理由 本当に、本当にクール。 基本的には、メモリを与えられている カードファイル 写真は削除されている。 しかし、あなたがしようとしている 何それらをすべて回復している。 [OK]をクリックします。 だから、本当にエキサイティングだが、多分 あなたがしているので、少し威圧 空のCファイルおよび指定された あなたはそれを記入する必要があります OK、それでは、これを破るみましょう 管理しやすい部分に。 あなたが開くしたいと思う メモリカードファイル。 それは十分に簡単そうです。 その後、先頭を見つける jpg画像。 このメモリ上のすべてのファイル カードはJPGのみであることを行っている。 その後、あなたが先頭を見つけたら、 あなたは、新しいJPGをオープンしようとしていること 、のように、JPGを作成し、512を書き込む 新しいJPGになるまでの時間のバイト 出現し、プログラムを終了する、一回 あなたは、ファイルの終わりを検出。 したがって、最初のステップは、最初に開くことです メモリカードファイル。 しかし、あなたはすでにこれを知っている、とあります ために起こっているファイルI / O機能 非常に有用であることが分かる。 [OK]をクリックします。 だから、JPGのみは何ですか? 我々は最初にそれを必要とするので。 さて、JPGのみ、単にビットマップのような、 単なるバイトの配列である。 幸いなことに、すべてのJPGのいずれかで始まる 0xFFで、0xd8、0xFFで、0xE0と、1列 バイト、または別の バイトのシーケンス。 ので、これらの4バイトが示す JPGの始まり。 これらの2つの組み合わせにほかならない 4バイト。 そして幸運なことに私たちのために、もう一つの事実、私たち を利用できることであるすべての JPGは、横並びに記憶されている メモリカードに。 私はの構造を表現しました これについて概略的にメモリカード ここにスライドさせます。 ここでは、すべての正方形、すべての長方形、 512バイトを表し、それが開始され 我々はしないという点でグレーで 本当にJPGを持っています。 しかし、我々は最終的にヒット スターとブロック。 つまり、うち最初の4バイトを意味し このうち512は、これら2つのうちの1つである JPGのシーケンスを開始する。 そして、我々はかつて、そこから移動し、 1 JPGが終了すると、次の1が開始されます。 我々はこれまで、それ以上はありません これらの間の灰色の空間。 しかし、どのように我々は実際にこれを読んでください 我々が作ることができるように、512バイトを読み取る 比較第一位! さて、戻ってのfreadに行こう、これ 含まれています構造体を取り込み、 あなたが読んでいるバイト。 だから置くつもりだ そこにあるもの - サイズ、数、およびその後inpointer あなたはから読んでいること。 今、我々は一度に512を読みたい、と 我々は、バッファにこれを保存したい、 私はそれを呼び出すことにします。 基本的には、保有するつもりだ これらの512バイトへの観光 それで物事よね? 我々はどちらか一を比較するつもりだ 4バイト、あるいは我々がしようとしている [OK]を、それを読み込む? それではデータポインタはその後でしょう あなたのバッファとして機能し、 inpointer、まあ、それはちょうど起こっている メモリカードであると。 当社のメモリカードの回路図に戻って。 私たちは、一度に512バイトを読み取るしようとしている、 すべての512バイトのブロックを格納 バッファに、それらの上に保持 私たちが知っているまで、これらの512バイトのバッファリング まさにそれをすることができません。 だから、最初は何もありませんので、 我々は、バッファを読んで、それを比較し、よ 我々はそれで何もする必要はありません。 そして、我々は最終的にスターを打つ 我々はしたことを意味し、ブロック 私たちの最初のJPGを見つけました。 だから、バッファは今開催 そのJPGからバイト。 次回512バイト、彼らはだから ていないスターブロックもある そのJPGの一部。 とJPGのみが、そこから連続している 我々は次のJPGを打つまでは、中に。 した後、緩衝液を保持している そのJPGのための512バイト、 というように、など。 [OK]をクリックします。 ですから、最初の星を獲得したのヒット後、 あなたはどのようにブロック、最初のJPG、 実際には、よく、それを開く? それでは新しいJPGを作ろう。 JPGのファイル名は、しようとしている 形式でなければ、番号、番号、 番号。jpg、という点では、で指定している それらが発見されている順に、 0から始まる。 したがって、最初のJPGがあること 000.jpgになります見つける。 だから、おそらく良いアイデアを追跡する あなたがこれまでに見つけたのか、多くのJPGのみ。 だから、ファイル名です。 しかし、どのように実際にそれを作るのですか? まあ、我々は使用するつもりだ この関数はsprintfと呼ばれる。 printf関数に似て少し、ここで あなたは、文字列のプレースホルダを使用することができます この場合を除き、sprintfのが印刷されます 現在にファイル出 ディレクトリではなく、端子に。 [OK]をクリックします。 そこでここでは、我々はタイトルを持っていることがわかり、 格納するchar配列 結果の文字列、そして我々は渡し 実際の文字列のタイトル 我々はしたと同じように、プレースホルダ、 printf関数で行うことを学んだ。 しかし、私はここにある、このコード 2.JPGなく、002.JPGを与える。 だから私は、どのように見つけるためにあなたに残しておきます 作るためにプレースホルダを変更する 正しい名前。 [OK]をクリックします。 あなたはsprintf'dたらそう、あなたのことができます それが存在するため、そのファイルを開く あなたの使用してfopenを持つディレクトリが、 あなたが好きなモードのタイトル、その後、 インチ、そのファイルを開きます だから今我々は新しいJPGファイルを開いたので、 今、私たちは、512バイトを書き込むことができます 新しいJPGが見つかるまでの時間。 それでは、もう一度見てみましょう 関数fwriteの構文で。 私はこのスライドAを示すてることを知っている 多くが、私はちょうどことを確認するには あなたたちは、あまりにも混乱していないため、 私はそれが非常に簡単だということを知っている 最初と最後をミックス 引数、特に。 しかし、あなたから書いていることを覚えておいてください outファイルイメージに、バッファー。 これで、512の書き込み方法を理解していること あなたがた事がJPGファイルにバイトを 作成された、まあ、我々はそれを停止したい プロセス私達はの最後に到達したら 私たちのカードがあるかもしませんので、 発見される任意のその他のイメージ それでは、関数freadに戻りましょう もう一度、私は約束します。 、どのように多くのサイズの項目を返しFREAD サイズは、成功する準備ができていました。 理想的には、これはどのようなことを行っている あなたは正しい、番号を渡す? あなたが番号を読み取るしようとしているので、 サイズ、大きさの要素の。 しかし、関数freadはそれを読み取ることができない場合には 要素の数、それは戻ります どのような数はそれが正常に読み込ま。 今、注意すべき重要な点です あなたが別のファイルを使用する場合は、I / Oという fgetc関数のような関数が、それはまた、戻ります それが正常に読み込ま項目の数。 何がこの機能の便利なのはある それは内部の関数を使用する場合 条件は、それ自体を実行しながらう ある条件を決定する 本当に便利。 ですから、この条件を持っている場合、たとえば、 もし関数freadバッファ、はsizeof犬、2、 ポインタは、1に等しい等しくなる 私が読みたいことを意味します 一度に2匹の犬。 しかし、関数freadは1ではなく2などを返す場合 予想される、すなわち2があることを意味 犬は私のファイルに残ってのではなく、1。 しかし、それは2を返した場合、私はまだ持っている 私のバッファの中にあるものを2犬。 だから今それはあなたにどのように感を与え ファイルの終端をチェックしますが、 それではロジックを介して行きましょう。 どのように私たちは実際にすべてをつなぎます 一緒にこれらの要素の? 私たちは、以来、私たちの最初のJPGを打ったら 私たちは、JPGのみが保存されていることを知っている 連続して、私達はまで書き込みされます 私たちは、カードファイルの最後に到達。 しかし、我々は書きたくない それまで何でも。 だから、私たちがしていることだけではなく、重要 新しいJPGの開始が、どうか 我々はすでに、JPGかを見つけた。 これは、新しいJPGの始まりなら、我々はよ 場合は、我々の現在のJPGファイルを閉じたい 我々は1開いて、[開く​​]を持っている に書き込むための1。 それは新しいJPGの始まりではない場合は、 しかし、我々は同じJPGファイルしておこう 開き、その中に記述します。 我々はどちらかに私達のバッファーを記述します 但し私達が開いているJPGファイル、 我々はもちろん、1開いている。 我々は我々の最初のJPGを見つけていない場合 まだ、私たちは何も書かない。 このプロセスはあなたまで継続 カードファイルの最後に到達。 そして最後に、あなたがしたいと思う 何かをfcloseはいることを確認してください あなたはfopenedしたファイル。 あなたが慣れたら コンセプトは、いくつかを見てみましょう 私がここに用意しました擬似コード、。 まず、カードファイルを開きたい、 し、次のプロセスを繰り返す あなたが達したまで カードの端。 あなたは、512バイトを読みたい バッファに。 そのバッファを使用して、確認したいと思う あなたは開始時にしているかどうか 新しいJPGか。 そしてその質問へのお答えします あなたのファイル管理に影響を与える - そのあなたが開いているファイル、その のものはあなたが閉じます。 その後、あなたはすでに、JPGを発見した? どのように維持されてきた それのトラック? そして、そのに応じて、次のいずれかのよ あなたの現在のJPGに書き込む オープンかどうかはまったく書いて、 まだJPGを見つけていないので。 最後に、の最後に到達したら 何かを閉じたいと思うファイル、 開いている残りのファイル。 我々はここで整頓になりたい。 そして、それを、あなたはすべてを回復しました そのメモリのファイルが紛失しています かなり驚くべき偉業であるカード。 だから、背中に自分自身をなでる。 しかし、1つ以上の要素があります コンテストですPSET、。 あなたはそのすべての画像を見つけることができます あなたが実際に回復したこと CS50のスタッフの写真。 だから、キャンパス内で、またはどこかにいるなら 近くには、その後、一緒に写真を取ることができます スタッフ、そして持ってセクション スタッフメンバーとほとんどの写真 その回復のファイルからなります 素晴らしい賞品を得る。 それを使用すると、あなたは終わった PSETを回復。 私の名前はZamylaであり、これはCS50である。