>> [音乐播放]
>> ROB BOWDEN：你好。
我抢，让我们希望， 该解决方案可以帮助把你
在复苏的道路。
所以，让我们开始吧。
>> 我们看到，马上我们 只是为了确保我们
使用正确恢复。
因此，使用应该只是一些 像点斜线恢复。
>> 现在，我们要打开的预期 卡点的原始文件。
我们在这里看到，我们使用了 恒生下划线的文件名，
而在这里，我们有哈希 定义为卡点原料。
确定。
>> 因此，我们需要确保该 成功打开，因为如果它
没有，那么我们就应该向用户发出警告。
但假设它确实，我们现在是 要申报大小的JPEG缓冲
文件名的长度。
因此，这将是该缓冲区 我们要的sprintf成。
>> 那么，什么是JPEG文件名长度？
在这里，我们看到它的 哈希定义为八人。
那么，为什么8？
以及一个给定的文件将被命名为 像零零零。
JPG格式，然后我们需要一个反斜杠零。
所以我们需要一个缓冲，可 存放八个字符。
现在，我们将有一个计数器，该计数器的 要跟踪的
我们发现数量JPEG文件。
>> 最后，我们将有一个 JPEG文件，该文件最初是空
这将是当前 我们正在写打开的文件。
现在，我们将有 一个额外的缓冲区。
这是不一样的我们的sprintf 缓冲区，这个缓冲区是一个
我们正在阅读中的数据 从卡点生。
>> 因此缓冲区将是的 无符号的字符，你可以
基本上只是把我们的字节，它的 将是大小的块大小
在那里，我们告诉你， 块的大小为512。
所以，JPEG文件，你可以把一切 为512字节的块。
>> 现在，我们要循环 在整个文件。
我们打​​算到f读入我们的缓冲区 从单个字节的块大小倍
卡点的原始文件。
现在是什么f读入返回？
它返回的项目数 它成功地读取。
所以，如果它成功地读取512字节，则 我们要看到这是否是一个
JPEG或写入到一个JPEG文件。
如果它没有返回512个字节， 那么无论是文件已结束
这种情况下，我们将打破在y的 循环，或有某种错误
在这种情况下，我们还会打出来的 在y循环，但我们会想报告
出事了。
>> 确定。
因此，假如我们成功地读取 在512个字节，我们要首先检查
使这些字节我们 刚读开始在一个JPEG。
所以，如果是我们的缓冲区的JPEG头。
现在，它是什么JPEG头在做什么？
让我们来看看。
>> 在这里，我们看到，这个函数是 返回一个牛市，而牛市 -
还有这里，我们正在检查，看是否 头零等于这个常数和
头一等于这个常数和 包头二等于这个常数，
头3等于这个或这 不变，所有这些常数是
只是凑在这里定义的， 正是我们告诉你，在规范中
即一个JPEG开始。
所以这个功能只是将 返回true，如果此缓冲区代表
一个新的JPEG开始 否则为false。
>> 确定。
因此，如果这确实代表了一种新的JPEG， 那么我们首先要检查，看是否
JPEG文件不等于空， 在这种情况下，我们关闭它。
所以为什么我们需要检查 来看看它是否不为空？
好极第一张JPEG我们 找到我们不会已经有
一个开放的JPEG文件。
所以，如果我们尝试关闭，然后 我们不是在做一些很正确。
>> 但以后每JPEG格式的 我们打​​开，我们要关闭
以前的文件。
所以，现在我们将用sprintf我们 在这里我们使用的是之前所说的
缓冲JPEG文件名。
而我们将要使用的JPEG文件 名称格式为我们的格式。
那是什么？
在这里，我们看到它是百分之零 3D.JPEG其中零叁只
说，我们将使用三个整数 这个用零填充。
因此，这是我们如何会得到零零 one.JPEG和零10.JPEG等。
>> 我们将用sprintf。
和整数，我们要插入 成字符串是麻木的JPEG
回收的，这是最初为零。
因此，第一个文件打开是怎么回事 是零零零点JPEG格式。
然后我们递增它使 我们打​​开下一个文件将是零零
一个点的JPEG，我们会增加它 再这样它会是零零2点
JPEG等。
>> 好的。
所以现在的JPEG文件的内部 名，我们有的名字
文件是我们想要的。
我们可以在F打开该文件进行写操作。
确定。
再次，我们需要检查，以 确保成功的文件
如果没有，那么既然开 有一些错误。
>> 所以，现在我们已经得到了过去 这是一个JPEG的一部分。
在这里，我们看到了我们要去 写入到JPEG。
但是，我们首先有这样的支票，说： 如果JPEG文件不等于空。
我们为什么需要呢？
以及JPEG文件等于null，当我们 目前有一个开放的JPEG格式。
>> 如果卡点开始生什么 有一堆字节的
并不代表一个JPEG？
然后我们将要 跳过那些字节。
如果我们没有这个检查，然后我们 要写入一个未开封
文件的第512字节 这是不好的卡。
确定。
>> 因此，假如我们有一个打开的文件，然后 我们将写入该文件中的
512字节，我们已经在我们的缓冲区。
而且我们再一次检查，以 确保成功的512个字节
写，因为如果他们不 成功写入，然后东西
出了错。
我们将关闭我们的文件，打印 出事了，并返回。
假设一切顺利正常，则 我们将继续循环关闭
旧文件，打开新文件，写入 数据到新的文件，所以
直到最后，这架F阅读 返回零这意味着
该文件被完成。
>> 所以，现在的读卡结束了，我们 看到我们要去F关闭
我们有开放的，但最后的文件 我们正在检查，如果JPEG文件
不等于空。
以及在F接近有道理的，因为如 我们要打开的文件，我们关闭
以前的文件，但最后 我们打​​开的文件永远不会被关闭。
所以，这就是这个在做什么。
>> 但是，为什么我们需要检查是否为null？
好吧，如果卡点生没 有它在一个单一的JPEG？
在这种情况下，我们将有 从未打开过的文件。
如果我们从来没有打开一个文件，我们应该 不要试图关闭该文件。
所以，这就是这项检查在做什么。
>> 现在在这里，正如我以前说过，我们可以 已经打破了，Ÿ循环或者如果
该卡已经结束或者有 一些错误从卡读取。
因此，这是检查，看看是否有 错误从记忆卡读取，在
这种情况下，我们会说有 是一个错误的读数。
我们不希望用户去思考 一切顺利去了。
我们会返回一个用于错误。
>> 最后，我们将f关闭我们的原始文件， 我们的卡点原料，以表明
一切都很顺利，并回报 零，仅此而已。
>> 我的名字是罗布，这是恢复。
>> [音乐播放]