Я пытаюсь создать функцию, которая берет ряд файлов и записывает содержимое каждого из них в новое.Слияние двух файлов на треть в C (fread и fwrite)
#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;
}
и я не получаю вывод в своем выходном файле. Кажется, они закрывают их в самый раз.
[? Почему «(! Feof (файл)) в то время как» всегда ошибочно] (HTTP : //stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong) – kaylum
Я думаю, что вы дезинформировали, что возвращает 'fread()'. Он возвращает количество прочитанных элементов. В вашем заявлении размер равен 1024, поэтому ожидайте возврат «1», означающий чтение 1024 байта или «0», менее 1024 байт. Если вы поменяли размер и количество, то значение, возвращаемое 'fread()', будет выровнено по вашему ожиданию. Значение, если вы попытаетесь прочитать 1024 элемента размером 1 байт, тогда значение вернет способ чтения байтов. – alvits
Я изменил свою функцию и все еще не работает. – Telefang