Tip:
Highlight text to annotate it
X
>> [音楽再生]
>> 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である。