Недавно я начал работать с файловыми операциями в C, и я смог успешно скопировать содержимое одного файла в другой.Работа с файлом в C
Я сделал шаг вперед, чтобы прочитать содержимое файла с самого начала файла, а затем написать тот же контент в конце того же файла. (Аналогично добавлению). Но я не могу этого сделать.
Вот код, который я написал. Может кто-нибудь предложить, какая ошибка я здесь сделал?
#include <stdio.h>
int main(int argc, char **argv)
{
int size = 0, index = 0;
char byte = 0;
FILE *fp_read, *fp_write;
if ((fp_read = fopen(argv[1], "r+")) == NULL)
{
printf("Unable to Open File %s\n", argv[1]);
}
fp_write = fp_read;
fseek(fp_write, 0, SEEK_END);
size = ftell(fp_write);
printf("The Size of the file %s:\t%d\n", argv[1], size);
for (index = 0; index < size; index++)
{
if (fread(&byte, 1, 1, fp_read) != 1)
{
printf("Unable to Read from the file at Location:\t%d\n", index);
}
if (fwrite(&byte, 1, 1, fp_write) != 1)
{
printf("Unable to Write to the file at Location:\t%d\n", index);
}
}
if (fclose(fp_read))
{
printf("Unsuccessful in Closed the File\n");
}
return 0;
}
С уважением,
Наруто Узумаки
Вы должны пометить язык (и * не * поместить его в заголовок). Это помогает людям найти его, а также изменяет работу синтаксиса highligting кода. – crashmstr
Просто используйте указатель на один файл. fseek вернитесь к началу файла перед его чтением. Затем перейдите к концу, чтобы написать его (хотя указатель файла находится в конце, может понадобиться fseek). EDIT: от стандарта c99 "[для режима обновления] не следует напрямую следовать за входом без промежуточного вызова функции fflush или функции позиционирования файла (fseek, fsetpos или перемотка назад), и вход не должен сопровождаться непосредственно вывода без промежуточного вызова функции позиционирования файла, если только операция ввода не встречает конец файла « – ooga
В заявлении ftell()« указатель файла »находится в конце файла. Поэтому fread() будет пытаться прочитать за конец файла, поэтому, естественно, fread() не работает, возвращая EOF. Копирование указателя дескриптора файла не создает второй доступ к файлу, он делает только копию указателя. вы можете просто вызвать fopen с режимом «a», чтобы установить указатель fp_write. – user3629249