gygant
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Доброго времени суток Возник следующий вопрос. Обрабатываю большие текстовые файлы, хочу добавить полосу прогресса. Имею на руках размер файла в байтах, построчно считываю и полоса прогресса показывает неточные данные. Если быть более подробным, то double size = SizeCheck(OpenDialog1->FileName.c_str()); //тут получили размер файла double step = 0; //отношением этой переменной к размеру файла измеряем прогресс ifstream f(OpenDialog1->FileName.c_str()); //получили файл string line; CGauge1->Progress = 0; //стартовый прогресс for (line;getline(f,line);) //построчно считываем { step+=sizeof(line); //увеличиваем шаг CGauge1->Progress = step / (size / 100); //выводим значения }; Проблема в том, что при маленьких файлах (пара тройка килобайт) у меня полоса прогресса "зашкаливает", так сказать. При больших - наоборот отстает. Думаю, это связано с самим алгоритмом: размер файла равен сумме размеров строк, составляющих этот файл. А sizeof кажется дает размер не строки, а переменной, отведенной под эту строку.. не знаю. Скажите, пожалуйста, кто что думает. Добавлено: З.Ы. SizeCheck - рукописная процедура. При необходимости текст покажу, но размер дает совпадающий с виндовыми свойствами. | Всего записей: 56 | Зарегистр. 03-06-2010 | Отправлено: 23:54 21-04-2012 | Исправлено: gygant, 23:56 21-04-2012 |
|