Я пытаюсь прочитать файл на C и сделать несколько загрузочных отпечатков, которые покажут мне, сколько файлов я прочитал до сих пор (я читаю файл кусками).Моя проблема в том, что когда дело доходит до файлов большего размера (> 100 МБ), загрузка падает, и я знаю, что это потому, что существуют ограничения для типов данных в C, но я не знаю, как это исправить или как к нему подойти.
Во-первых, прежде чем начать чтение фрагментов файловой части, я вычисляю размер файла, а затем использую математическую формулу, которая вычисляет процент, так как я делаю сумму из того, сколько я прочитал и скольковсего.
FILE *file;
file = fopen("test.txt", "r");
size_t nread;
char * buf = (char*)malloc(sizeof(char) * CHUNK);
long total = 0;
fseek(file, 0L, SEEK_END);
total = ftell(file);
fseek(file, 0L, SEEK_SET);
if (file)
{
while ((nread = fread(buf, 1, CHUNK, file)) > 0)
{
printf(" loading: %d \n", ftell(file)*100/total);
}
}
fclose(file);
Проблема в размерах в C, так как файлы больше, чем предельные значения int / long int, они переполняются, есть ли способ правильно отобразить, сколько файлов яразобрали?Я не могу сохранить результат "ftell (file) * 100 / total" в int или long int.