[音楽再生] ROBボーデン:こんにちは。 私はロブだし、のはそれを期待しましょう このソリューションは、あなたを置くことができます 回復への道。 それではを始めましょう。 我々はすぐに私たちがしていることがわかります ちょうど私達がしていることを確認します 正しくリカバリ]を使用。 だから、使い方はちょうど何かであるべき ドットスラッシュのように回復します。 今、私たちは期待を開くしようとしている カードは、RAWファイルに点在しています。 私達は私達が使用していることがわかり 一定の生のアンダースコアファイル名、 これまでここでは、ハッシュを持っている カードは未加工のドットとして定義されています。 [OK]をクリックします。 だから我々は確認していることを確認する必要があり オープンに成功のためならば 、その後、我々はユーザーに警告する必要がありませんでした。 しかし、それがなかったと仮定して、我々は今だ サイズのJPEGのバッファを宣言するだろう ファイル名の長さ。 だから、これはバッファされようとしていること 私たちはにはsprintfするつもりだ。 だから、JPEGファイル名の長さは何ですか? ここに、我々はそれがだと見ること 8のように定義されたハッシュ。 では、なぜ8? さて、与えられたファイルは、名前が付けられます ゼロゼロゼロのようなもの。 JPG、その後、我々は、バックスラッシュゼロを必要としています。 だから我々は可能なバッファを必要とする 8文字を格納。 今、私たちはだカウンターを持っているつもりです を追跡しようとして 数字JPEGファイル、我々が見つかりました。 そして最後に、我々は持っているつもりです nullに初期化されたJPEGファイル 現在であることを行っている 我々が書いている開いているファイル。 今、私たちは持っているつもりです 追加のバッファ。 これが私たちのsprintfと同じではありません このバッファは1であるバッファ 私たちは、データに読んでいることを カードからの生点在しています。 だから、バッファがあることになるだろう 符号なしの文字、そのことができます 基本的にはちょうど私達にバイトを扱い、それがだ サイズブロ​​ックサイズであることを行って ここで、私たちはあなたを伝えるように、 ブロックサイズは512である。 だから、JPEGファイルは、あなたはすべてを扱うことができます 512バイトのブロックとして。 今、私たちはループするつもりだ ファイル全体にわたる。 私たちは、バッファに読み込むFになるだろう 単一バイトのブロックサイズの倍 カードは、RAWファイルに点在しています。 今Fが戻って何を読んでいますか? これは、項目の数を返します。 それが正常に読み込まれていること。 それは、次に、512バイトを読み取ることに成功しそうである場合 我々は、これがあったかどうかを見てみたい JPEGまたはそれは、JPEGファイルに書き込む。 そして、それは512バイトを返さなかった場合には、 そのファイルのいずれかで終了した その場合、我々はYから抜け出すだろう ループ、またはエラーのいくつかの並べ替えがあります その場合、我々はまた、から抜け出すだろう Yループが、我々は報告したいと思う その何かが間違っていた。 [OK]をクリックします。 だから我々は正常に読み込まれていることを想定し 512バイトでは、まずチェックしたい そのこれらのバイトは、その我作る ただ、JPEGを開始読み込む。 私たちのバッファのJPEGヘッダであるかのようにします。 今では、JPEGヘッダに何をやっている? それでは見てみましょう。 ここに、我々は、この機能があることがわかり 牛を返すと、その雄牛 - ここにも、私達はかどうかを確認している ヘッダーゼロこの定数に等しく、 ヘッダー1は、この定数に等しく、 ヘッダー2は、この定数に等しい ヘッダ3はこれか、これを等しく これらすべての定数であり、定 ちょうどここで定義されたハッシュしている まさに我々がspecであなたに言った JPEGが始まること。 ので、この機能は単にしようとしている このバッファが表す場合はtrueを返す 新しいJPEGの開始 そうでない場合はfalse。 [OK]をクリックします。 これが新しいJPEGを表現している場合は、 その後、我々は最初のかどうかを確認したい JPEGファイルは、ヌルに等しくない その場合、我々はそれを閉じます。 そして、なぜ、我々は確認する必要があります それがnullでないかどうかを確認するには? まあ我々は非常に最初のJPEG 我々はすでに持っていることはありません オープンJPEGファイル。 だから、我々はそれをクローズしようとすると、 我々はかなり右に何かをやっていない。 しかし、すべてのその後のJPEGこと 我々は開いて、我々は閉じるようにします 前のファイル。 だから今我々は、我々としてはsprintfを使用するつもりだ 我々は使用している場合、前に言った JPEGファイル名をバッファ。 そして、我々はJPEGファイルを使用するつもりだ 私たちの形式としてフォーマットに名前を付けます。 そして、それは何ですか? ここに、我々はそれがパーセントゼロであることを参照してください。 3D.JPEGちょうどゼロ3 我々は3の整数を使用しますと言っている このため、ゼロでパディング。 だから、これは我々がゼロにゼロを買ってあげる方法です one.JPEGなどゼロ見られた回数や。 私たちは、sprintfのを使用するつもりだ。 そして、我々は挿入している整数 文字列にしびれJPEGファイルである もともとゼロである、回復した。 だから、オープンした最初のファイルが起こっている ゼロゼロゼロドットのJPEGであると。 ようにして、我々はそれをインクリメントしている 我々は次に開いたファイルはゼロでゼロになります 1ドットのJPEG、我々はそれをインクリメントします 再びので、ゼロ、ゼロ2点になるでしょう というように、JPEGや。 わかりました。 だから今JPEGファイルの内部 名前、我々の名前を持っている 私たちが望むファイル。 我々は、F書き込み用にそのファイルを開くことができます。 [OK]をクリックします。 再び、我々は作るためにチェックする必要があります 成功したファイルことを確認してください そして、それがなかった場合から開か いくつかのエラーが発生しました。 だから今我々は、過去得ている これは、JPEG部である。 そしてここで、我々は我々が行っている参照してください。 JPEGに書き込む。 しかし、我々は最初に述べています、このチェックを持っている JPEGファイルが等しくないNULLがない場合。 なぜそれが必要なのでしょうか? ときに我々だけでなく、JPEGファイルはNULLに等しい 現在開いて、JPEGを持っています。 どのようなカードドット生に起動した場合 そのバイトの束と JPEGを表すものではありません? その後、我々はするつもりだ それらのバイトをスキップ。 我々は、このチェックを持っていない場合、我々はしている 未開封に書くつもり 最初の512バイトを提出 良くないカード。 [OK]をクリックします。 それでは、我々はファイルを開いていると仮定して 我々はそのファイルへの書き込みをしようとしている 我々は我々のバッファを持っている512バイト。 そして、我々は再び作るためにチェックしている 首尾よく512バイトことを確認してください 彼らがいなかった場合、以下の原因書かれていた 正常に書き込まれ、その後何か 間違っていた。 我々は、我々のファイルを閉じる印刷します 何かが間違っていた、と返す。 すべてがその後、正常に行くと仮定して 我々はクローズループしておこう 古いファイル、新しいファイルを開く、書き込み ので、新しいファイルにデータ、および 最後に、このFが読むまでに ゼロを返す手段 ファイルが実行されていること。 だから今カードの読み取りが終わったので、 我々は、Fクローズしようとしていることがわかります 我々は開いていたが、最後のファイル 我々はチェックしている場合は、JPEGファイル NULLと等しくない。 さて、Fの近くには、理由として理にかなっている 我々はクローズしている、ファイルをオープンする 前のファイルが、非常に最後の 我々は開いたファイルを閉じれることは決してありません。 だから、これが何をしているかだ。 しかし、なぜ我々はnullをチェックする必要がありますか? さてどのような場合は、カードのドット生はしませんでした その中の一つのJPEGがありますか? その場合、我々はならない ファイルを開いたことはありません。 我々は、ファイルを開いたことがない場合、我々はすべき そのファイルをクローズしようとしない。 だから、このチェックが何をしているかだ。 私が前に言ったように今ここに、我々は可能性 そのYループのどちらかのを壊れている カードが存在する場合、エンドまたはしました カードからの読み込み多少の誤差はご了承ください。 だから、これがあったかどうかを確認してい で、カードからの読み込みエラー その場合、私たちはそこに言うよ エラー読んでいた。 我々は、ユーザーが考えたくない すべてが成功しました。 そして、我々は、エラーのために1を返します。 最後に、我々は、F私たちの生のファイルを閉じます、 私たちのカードは、それを示すために、生のドット すべてがうまくいったとリターン ゼロ、それはそれだ。 私の名前はロブであり、これは回復した。 [音楽再生]