提问人:LifeLong21 提问时间:7/31/2023 最后编辑:LifeLong21 更新时间:7/31/2023 访问量:64
如何打开递增的单个文件?
How do I open individual files that increment up?
问:
所以我正在做这个功课,我必须通过存储卡,通过将数据放入缓冲区,从缓冲区数据创建新的JPEG文件,然后将该数据写入这些新文件来获取图像,从而恢复一些图像。现在,我被困在如何使用 C 中的 fopen 函数打开新创建的文件以写入该数据,并且每个文件都命名为“###.jpg”,从 000.jpg 增加到 050.jpg。我想我可以一遍又一遍地打开并编写文件,但这显然是本能错误的。
下面是一个粗略的代码片段来解释我的问题。在写这篇文章时,我并不真正担心内存分配或分段错误/错误,我只是想传达我的想法,以便你们都理解我的问题。我尝试将 file_num 放在“w”之后的 fopen 的末尾参数中,但这只是一个错误。
#include <stdio.h>
#include <stdlib.h>
const BLOCK_SIZE = 512;
int buffer[BLOCK_SIZE];
unsigned int file_num = 0;
int main()
{
//Open memory card
FILE *pFile = fopen(card.raw, "r");
//Open and create JPEG files
while(fread(buffer, 1, BLOCK_SIZE, pFile) == BLOCK_SIZE)
{
if(some condition)
{
//Create JPEG file
sprintf(pFile, "%.03i.jpg", file_num++);
//Open new JPEG files to write data(this is my problem right here)
FILE *pImg = fopen(###.jpg, "w");
....
}
}
}
答:
2赞
Oka
7/31/2023
#1
您需要一个字符缓冲区来存储创建的字符串。此字符串用作 的第一个参数。sprintf
fopen
的格式说明符是 ,而不是 。printf
unsigned int
%u
%i
下面是一个简单的示例,用于创建文件 000.jpg 到 050.jpg(包括 050)。
它还将每个文件的名称写入相应的文件(包含在 中)。< >
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char file_name[64];
for (unsigned n = 0; n <= 50; n++) {
sprintf(file_name, "%03u.jpg", n);
FILE *current_file = fopen(file_name, "w");
if (current_file) {
fprintf(current_file, "<%s>\n", file_name);
fclose(current_file);
}
}
}
使用中:
$ ./create_files
$ ls
000.jpg 007.jpg 014.jpg 021.jpg 028.jpg 035.jpg 042.jpg 049.jpg
001.jpg 008.jpg 015.jpg 022.jpg 029.jpg 036.jpg 043.jpg 050.jpg
002.jpg 009.jpg 016.jpg 023.jpg 030.jpg 037.jpg 044.jpg create_files
003.jpg 010.jpg 017.jpg 024.jpg 031.jpg 038.jpg 045.jpg create_files.c
004.jpg 011.jpg 018.jpg 025.jpg 032.jpg 039.jpg 046.jpg
005.jpg 012.jpg 019.jpg 026.jpg 033.jpg 040.jpg 047.jpg
006.jpg 013.jpg 020.jpg 027.jpg 034.jpg 041.jpg 048.jpg
$ cat 000.jpg 040.jpg
<000.jpg>
<040.jpg>
$ rm {000..050}.jpg
评论
sprintf()
fopen(pFile, "w")
;pFile
FILE *
char name[20]; sprintf(name,"%03i.jpg", file_num++); FILE *pImg = fopen(name,"w");
file_num++
sprintf()