2011-04-17 93 views
1

我已收到一个原始文件,其中包含几个jpg图像。我必须通过文件,找到每个JPG图像,并将这些图像分别放在一个单独的文件中。到目前为止,我的代码可以找到每个图像开始和结束的位置。我还编写了一些代码,用于命名我可以用来放置图片的几个文件名。它是一个数组:char filename [],它包含以下名称:image00.jpg - image29.jpg。c中的文件处理?

我无法弄清楚如何在每次找到图像时打开文件,然后关闭该文件并为下一张图像打开一个新文件。我需要使用fwrite()吗?此外,每个图像都是512字节的块,所以我只需要找到第一个512字节的新图像。我需要将其添加到fwrite中吗?

因此,总结我的问题,我不明白如何使用fwrite(),如果这是我应该用来写入这些文件。 另外,我不知道如何使用我已创建的名称来打开这些文件。

在此先感谢您的帮助。让我知道是否需要发布任何其他代码。

+0

'字符的文件名片段[] = { “image00.jpg”};'是一个错误的声明,应该是'字符文件名[] = “image00.jpg”;'你已经将char * []赋值给char []。 – MByD 2011-04-17 03:57:45

+0

编辑代码示例会感到不友好和无益。我很欣赏其他人已经指出了一些错误,但目前的问题状态让我很不清楚你*做了什么*,*不知道*你现在*和*不能做什么。 – dmckee 2011-04-17 04:20:23

回答

1
  1. 使用fopen(rawfilename, "rb");打开原始文件进行阅读。和fread来读取它。
  2. 使用fopen(outfilename, "wb");打开输出文件进行写入,并使用fwrite写入。
  3. 正如我的评论所述,您将char *[]分配到char*,请使用char filename[] = "image00.jpg";代替。
  4. 不要忘记关闭每个文件完成其处理(R/W)后(看fclose()在其他环节的同一站点)
  5. 决定多少字节通过解析jpeg header每次读取。使用malloc来分配需要读取的字节数量,并且记住,对于缓冲区的每个分配,您需要稍后分配的缓冲区。
0

几乎所有的book on C programming应涵盖你需要的功能。正如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); 
... 
+0

从索引中生成文件名是不是更合理?可能使用'sprintf()'来格式化名称? – 2011-04-17 04:36:08

+0

大卫,我改变了我的文件名到你有什么,但我得到一个警告: 警告:从不兼容的指针类型初始化 – Joey 2011-04-17 20:50:24

+0

@Joey - 你应该声明它为数组:'char * filename []'。 – MByD 2011-04-18 11:58:59