[音乐播放] 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关闭我们的原始文件, 我们的卡点原料,以表明 一切都很顺利,并回报 零,仅此而已。 我的名字是罗布,这是恢复。 [音乐播放]