Я пытался скопировать 2 двоичных файла, один на другой, используя fread
и write
.Я прочитал несколько статей, в которых объясняется, как они работают, но я не понимаю, в чем здесь моя ошибка.
Я пытался переключить символ fread
на int
, поэтому-1
не будет мешать процессу, но, похоже, он не работает.
Некоторые ссылки, которые я посмотрел, чтобы найти ответ:
Почему это «while (!»)!feof (файл)) ”всегда неправильно?
https://www.tutorialspoint.com/c_standard_library/c_function_fwrite.htm
https://www.tutorialspoint.com/c_standard_library/c_function_fread.htm
Копирование двоичных файлов
Копирование данных из одного текстового файла в другойв C
while (tempNum != EOF) {
fread(tempNum, 1, 1, fptr);
fwrite(tempNum, 1, 1, fp);
}
Пример для тестирования:
#include <string.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
FILE *fptr;
FILE *fp;
int main(int argc, char** argv)
{
int flag = 0;
int exist = 0;
char currentChar = 0;
int tempNum = 0;
fptr = 0;
fp = fopen(*(argv + 3), "r");
fptr = fopen(*(argv + 2), "r");
char temp_array[10000] = { 0 };
if (fptr == NULL)
{
printf("we cannot extract from nothing.");
flag++;
}
else if (fp != NULL)
{
printf("This file already exists. If you would like to overwrite it enter 0. %s");
scanf("%d", &flag);
}
if (!strcmp(*(argv + 1), "textCopy") && flag == 0)
{
fclose(fp);
fclose(fptr);
printf("A");
fp = fopen(*(argv + 3), "w");
fptr = fopen(*(argv + 2), "r");
printf("%s , %s", *(argv + 2), *(argv + 3));
while (currentChar != EOF)
{
printf("a");
currentChar = fgetc(fptr);
fputc(currentChar, fp);
}
fclose(fp);
fclose(fptr);
}
else if (!strcmp(*(argv + 1), "binaryCopy") && flag == 0)
{
printf("A");
fptr = fopen(*(argv + 2), "r");
fp = fopen(*(argv + 3), "w");
while (tempNum != EOF)
{
fread(tempNum, 1, 1, fptr);
fwrite(tempNum, 1, 1, fp);
}
}
getchar();
getchar();
return 0;
}
Ожидается: получить 2 одинаковых файла.
Фактически: я успешно скопировал первые 6 байтов файла (я использовал шестнадцатеричную мастерскую), но после этого Visual Studio упал и сказал, что параметры, переданные в функцию fread
, считают ввод фатальным.