Как сравнить две разные позиции в файле в C? - PullRequest
0 голосов
/ 30 июня 2019

Я внедряю программу для архивирования файла, используя метод сжатия кодирования по длине прогона.Есть ли способы, с помощью которых вы можете сравнить символы в файле или сравнить два файловых указателя, чтобы сделать это?

Я открыл файл (zipfilename), который я хочу сжать, и установил указатель файла с именем ftozip.Затем я попытался подсчитать количество каждого символа, используя этот файловый указатель, как показано в коде ниже (если условие).

FILE *ftozip;
ftozip = fopen(argv[1],"r");//open the file that we are zipping
if (ftozip == NULL) {//if there is an error opening
    perror("File cannot be opened ");
}
char zipfilename[30];
strcat(zipfilename, argv[1]);
strcat(zipfilename,".zip");
FILE *zipfilep = fopen(zipfilename, "a"); //zipfile openned to write

int count = 1;
while(1){ //incrementing the characters and storing in the zip  file
    if(*ftozip == *(ftozip +1)) {
        count++;
        char countchar[] = (char)count+(*ftozip);
        fputs(countchar, zipfilep);
        ftozip++;
        continue;
    }
    else {
        count = 1;
        countchar = (char)count + (*ftozip);
        ftozip++;
        if (feop(ftozip){
                break;
            }
            continue;
            }
    }

Это приводит к этой ошибке "недопустимые операнды в двоичном == (есть 'FILE' и 'FILE')".

1 Ответ

1 голос
/ 30 июня 2019

Разыменование указателя типа FILE*, как вы делаете с if(*ftozip == *(ftozip +1) ..., не обращается к содержимому файла. Для чтения или записи в файл или в файл побайтно используйте fread и fwrite.

...