gpt4 book ai didi

c - 在 C 中将两个文件合并为第三个文件(fread 和 fwrite)

转载 作者:太空宇宙 更新时间:2023-11-04 08:12:45 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,它接受一系列文件并将每个文件的内容写入一个新文件。

#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;
}

而且我的输出文件中没有得到任何输出。它似乎恰到好处地关闭了它们。

最佳答案

您是否打算将文件列表中的文本保存在上一个文件中?这不是很清楚。除了不可读的语法之外,代码还有很多问题。您应该使用 fclose 而不是 close。并读取多个单字节元素而不是巨型数组的一个元素。

固定代码如下:

#include <stdio.h>
#include <stdlib.h>

void file_copy(FILE *f1, FILE *f2) {
char buffer[1024];
ssize_t sz;

while (!feof(f1)) {
sz = fread(buffer, 1, sizeof(buffer), f1);

fwrite(buffer, 1, sz, f2);
}
}

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 = 1; i < argc-1; i++)
{
if ((f_in = fopen(argv[i], "r")) == NULL)
{
printf("Can't open %s for reading\n", *argv);
exit(1);
}
else
{
file_copy(f_in, f_out);
fclose(f_in);
}
}
fclose(f_out);

return 0;
}

关于c - 在 C 中将两个文件合并为第三个文件(fread 和 fwrite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38133858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com