【问题标题】:File processing in c?c语言中的文件处理?
【发布时间】:2011-04-17 03:52:44
【问题描述】:

我收到了一个包含多个 jpg 图像的原始文件。我必须浏览文件,找到每个 jpg 图像,然后将这些图像分别放在一个单独的文件中。到目前为止,我的代码可以找到每个图像的开始和结束位置。我还编写了代码,命名了几个可以用来放入图片的文件名。它是一个数组:char filename[],包含名称:image00.jpg - image29.jpg。

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

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

提前感谢您的帮助。如果我需要发布任何其他代码,请告诉我。

【问题讨论】:

  • char filename[] = {"image00.jpg"}; 是一个错误的声明,它应该是 char filename[] = "image00.jpg"; 你已将 char*[] 分配给 char[]。
  • 编辑代码示例感觉不友好且无益。我很欣赏其他人指出了其中的一些错误,但是您问题的当前状态让我非常不清楚您 做什么 知道什么以及您 可以不能现在就做。

标签: c file image-processing io


【解决方案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 分配需要读取的字节数,并记住,对于每个缓冲区分配,您需要稍后 free 分配的缓冲区。

【讨论】:

    【解决方案2】:

    几乎任何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);
    ...
    

    【讨论】:

    • 从索引生成文件名不是更明智吗,大概是用sprintf()来格式化名字吧?
    • 大卫,我把我的文件名改成了你的文件名,但我收到一个警告:警告:从不兼容的指针类型初始化
    • @Joey - 您应该将其声明为数组:char *filename[]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多