【发布时间】:2023-07-30 15:35:01
【问题描述】:
我正在尝试创建一个函数,该函数接受一系列文件并将每个文件的内容写入一个新文件。
#include <stdio.h>
#include <stdlib.h>
void file_copy(FILE *f1, FILE *f2) {
char buffer[BUFFER_SIZE];
size_t sz;
sz = fread(buffer, sizeof(buffer),1,f1);
while (sz == 1) {
fwrite(buffer, sz,1,f2);
sz = fread(buffer, sizeof(buffer),1,f1);
}
}
int main(int argc, char const *argv[])
{
FILE *f_in, *f_out;
int i;
if (argc < 3)
{
puts("Not enough arguments.");
exit(1);
}
if ((f_out = fopen(argv[argc-1], "w")) == NULL)
{
printf("Can't open %s for writing.\n", argv[argc-1]);
exit(1);
}
for (i = 0; i < argc-1; ++i)
{
if ((f_in = fopen(*++argv, "r")) == NULL)
{
printf("Can't open %s for reading\n", *argv);
exit(1);
}
else
file_copy(f_in, f_out);
close(f_in);
close(f_out);
}
return 0;
}
我没有在我的输出文件中得到任何输出。 它似乎正在正确地关闭它们。
【问题讨论】:
-
我认为您对
fread()返回的内容有误解。它返回读取的项目数。在您的声明中,大小为 1024,因此期望返回1意味着读取了 1024 个字节或0读取了少于 1024 个字节。如果您交换了大小和计数,那么fread()返回的值将与您的预期一致。这意味着如果您尝试读取 1024 个大小为 1 字节的项目,则该值将返回读取的字节数。 -
我改了功能还是不行。
-
您修复了该功能,但其他所有功能仍然损坏。
-
用
fopen()打开文件时,需要用fclose()关闭,而不是close(),close()需要声明:#include <unistd.h>