C语言 如何打开增量向上的单个文件?

0kjbasz6  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(115)

所以我做这个家庭作业,我必须通过存储卡,并恢复一些图像,将数据放入缓冲区,从该缓冲区数据创建新的JPEG文件,然后将该数据写入这些新的文件,以获得图像。现在,我被困在如何使用C中的fopen函数打开新创建的文件以写入数据,每个文件都被命名为“#.jpg”,从000.jpg递增到050.jpg。我想我可以一遍又一遍地打开和写入文件,但这显然是本能的错误。
下面是一个粗略的代码片段来解释我的问题。在写这篇文章的时候,我并不是真的担心内存分配或分段故障/错误,我只是想传达我的想法,以便你们都理解我的问题。我试着把file_num放在fopen的结束参数“w”之后,但是得到了一个错误。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. const BLOCK_SIZE = 512;
  4. int buffer[BLOCK_SIZE];
  5. unsigned int file_num = 0;
  6. int main()
  7. {
  8. //Open memory card
  9. FILE *pFile = fopen(card.raw, "r");
  10. //Open and create JPEG files
  11. while(fread(buffer, 1, BLOCK_SIZE, pFile) == BLOCK_SIZE)
  12. {
  13. if(some condition)
  14. {
  15. //Create JPEG file
  16. sprintf(pFile, "%.03i.jpg", file_num++);
  17. //Open new JPEG files to write data(this is my problem right here)
  18. FILE *pImg = fopen(###.jpg, "w");
  19. ....
  20. }
  21. }
  22. }

字符串

weylhg0b

weylhg0b1#

您需要一个字符缓冲区来存储sprintf创建的 string。此字符串用作fopen的第一个参数。
unsigned intprintf说明符是%u,而不是%i
下面是一个简单的示例,它创建了 000.jpg050.jpg 的文件。
它还将每个文件的名称写入相应的文件(包含在< >中)。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5. char file_name[64];
  6. for (unsigned n = 0; n <= 50; n++) {
  7. sprintf(file_name, "%03u.jpg", n);
  8. FILE *current_file = fopen(file_name, "w");
  9. if (current_file) {
  10. fprintf(current_file, "<%s>\n", file_name);
  11. fclose(current_file);
  12. }
  13. }
  14. }

字符串
使用中:

  1. $ ./create_files
  2. $ ls
  3. 000.jpg 007.jpg 014.jpg 021.jpg 028.jpg 035.jpg 042.jpg 049.jpg
  4. 001.jpg 008.jpg 015.jpg 022.jpg 029.jpg 036.jpg 043.jpg 050.jpg
  5. 002.jpg 009.jpg 016.jpg 023.jpg 030.jpg 037.jpg 044.jpg create_files
  6. 003.jpg 010.jpg 017.jpg 024.jpg 031.jpg 038.jpg 045.jpg create_files.c
  7. 004.jpg 011.jpg 018.jpg 025.jpg 032.jpg 039.jpg 046.jpg
  8. 005.jpg 012.jpg 019.jpg 026.jpg 033.jpg 040.jpg 047.jpg
  9. 006.jpg 013.jpg 020.jpg 027.jpg 034.jpg 041.jpg 048.jpg
  10. $ cat 000.jpg 040.jpg
  11. <000.jpg>
  12. <040.jpg>
  13. $ rm {000..050}.jpg

展开查看全部

相关问题