我得到了一个包含几个jpg图像的原始文件。我必须遍历文件,找到每一张jpg图像,然后把它们分别放在一个单独的文件中。到目前为止,我有代码,可以找到每个图像开始和结束的地方。我还编写了代码,命名了几个文件名,我可以用来放置图片。它是一个数组:char filename[],保存名称:image00.jpg - image29.jpg。
我不能弄清楚的是如何打开一个文件,每次我找到一个图像,然后关闭该文件,并打开一个新的下一个图像。我需要使用fwrite()吗?此外,每个图像都在512字节的块中,所以我只需要在找到第一个图像后每512字节检查一个新图像。我需要把它添加到fwrite吗?
所以,总结一下我的问题,我不明白如何使用fwrite(),如果我应该使用它来写入这些文件。此外,我不知道如何使用我已经创建的名称打开文件。
提前感谢您的帮助。让我知道,如果我需要张贴任何其他代码。
- 使用
fopen(rawfilename, "rb");
打开原始文件进行读取。并读取其中的内容。 - 使用
fopen(outfilename, "wb");
打开输出文件进行写入,使用fwrite对输出文件进行写入。 - 正如我在评论中提到的,你将
char *[]
分配给char*
,使用char filename[] = "image00.jpg";
代替。 - 不要忘记在完成每个文件的处理后关闭它(r/w)(查看
fclose()
在其他链接的同一站点) - 通过解析jpeg报头来决定每次读取多少字节。使用malloc来分配需要读取的字节数,记住,对于每个缓冲区分配,您都需要稍后释放分配的缓冲区。
几乎任何C编程书籍都应该涵盖您需要的函数。正如MByD所指出的,您将需要使用函数fopen()、fwrite()和fclose()。
我想您的代码可能包含类似于
的片段/* Warning: untested and probably out-of-order code */
...
char **filename = {
"image00.jpg", "image01.jpg", "image02.jpg",
...
"image29.jpg" };
...
int index = 0;
const int blocksize = 512; /* bytes */
...
index++;
...
FILE * output_file = fopen( filename[index], "wb");
fwrite( output_data, 1, blocksize, output_file );
fclose(output_file);
...