Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Frostegater
6 / 6 / 3
Регистрация: 30.08.2011
Сообщений: 48
#1

Чтение файла неизвестного размера - C++

02.04.2012, 11:09. Просмотров 2099. Ответов 11
Метки нет (Все метки)

Необходимо прочитать файл неизвестного размера, динамически растягивая массив, загнать файл в массив и узнать его размер. Приведите пожалуйста пример кода на Си или Си++. Я пробовал играться с realloc'ом, но не выходит. Что-то не так делаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2012, 11:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение файла неизвестного размера (C++):

Считать из файла матрицу неизвестного размера
Здравствуйте, уважаемые пользователи прекрасного форума! Обращаюсь к наиболее...

Из текстового файла неизвестного размера вывести на экран все предложения, не содержащие запятых
Привет, Программисты! :) Нужна ваша помощь... Есть задача по поводу работы со...

Массив неизвестного размера
Хочу написать функцию для нахождения предела последовательности. А и eps...

Указатель на строку неизвестного размера
Доброго времени суток. Возник вопрос при работе с символьными массивами. Если...

Умножение матрицы неизвестного размера
задание такоэ нужно ввести размерность 2 матриц с клавиатуры а потом их...

Массив заранее неизвестного размера
Возможно сейчас произвучит тупой вопрос,не судите строго,но можно каким-нибудь...

11
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
02.04.2012, 12:41 #2
а если использовать std::vector?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 12:44 #3
Покажи, как игрался?
0
Байт
Эксперт C
17767 / 11792 / 2450
Регистрация: 24.12.2010
Сообщений: 23,714
02.04.2012, 12:56 #4
Цитата Сообщение от Frostegater Посмотреть сообщение
но не выходит
Что именно не выходит? И каков порядок величины файла?
А вообще-то есть функция filelength
0
Frostegater
6 / 6 / 3
Регистрация: 30.08.2011
Сообщений: 48
02.04.2012, 13:09  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char **buf = NULL;
int i = 0;
char str[512]; 
FILE *fd = fopen(src, "rb");
while(!feof(fd))
{
    fgets(str, 512, fd);
    i++;
    buf = (char **) realloc(buf, sizeof(char *)*i);
    buf[i - 1] = (char *) malloc(strlen(buf) + 1);
    strcpy(buf[i - 1], str);
}
fclose(fd);
используется strlen, на сколько я понимаю он считает до EOF символа а в файле они имеются (ну нули)..
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 13:11 #6
Цитата Сообщение от Frostegater Посмотреть сообщение
считает до EOF символа а в файле они имеются (ну нули)
EOF != 0
1
Frostegater
6 / 6 / 3
Регистрация: 30.08.2011
Сообщений: 48
02.04.2012, 13:28  [ТС] #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
EOF != 0
хм незнал.. но суть в том, что strlen определяет размер до следующего нуля
0
Петррр
6155 / 3455 / 896
Регистрация: 28.10.2010
Сообщений: 5,926
02.04.2012, 13:29 #8
http://www.cyberforum.ru/cpp-beginners/thread397574.html#post2240784
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 13:40 #9
Цитата Сообщение от Frostegater Посмотреть сообщение
хм незнал..
sizeof(EOF) > sizeof(char). В два раза, примерно...
1
Frostegater
6 / 6 / 3
Регистрация: 30.08.2011
Сообщений: 48
03.04.2012, 10:24  [ТС] #10
там чтение текстового файла (без нулевых байтов), а мне нужно прочитать бинарник и так чтоб загнать в массив.. и последующем работать с ним. Я пробовал делать громадный массив char arr[0xFFFFFF], но вылетает с ошибкой.. в общем, не умею я работать с динамической памятью. Манов начитался уйму. Понял, но сделать не могу. Помогите пжл, но только на маны не шлите, уже тошнит..
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
03.04.2012, 10:45 #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
   int oldSize = 100;
   char * array = new char[oldSize];
 
   while(100500)
   {
      int size = oldSize + 25;
      char * newArray = new char[size];
      memcpy( newArray, array,  oldSize );
      delete[] array;
      array = newArray;
      oldSize = size;
   }
}
На каждой итерации цикла, массив будет увеличиваться на 25 элементов и в него будет копироваться данные из старый массив. И так пока память не кончится.
Разбирайся.

Добавлено через 1 минуту
new/delete замени на malloc/free
0
Flash_Zero
3 / 3 / 1
Регистрация: 07.03.2012
Сообщений: 5
03.04.2012, 14:19 #12
Frostegater,

Не по теме:

Кого мы видим

0
03.04.2012, 14:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2012, 14:19
Привет! Вот еще темы с решениями:

Ввод текста неизвестного размера в массив
(Консольное приложение) Я хочу сделать так чтобы при вводе текста программа...

Ввод и вывод строки неизвестного размера
Как ввести и вывести строку неизвестного размера в c++? Нигде просто...

Как обьявить массив неизвестного размера?
Помогите разобраться, есть класс, в котором обьявлен двумерный массив структур....

Можно ли создать вектор заранее неизвестного размера?
Скажите пожалуйста, можно ли создать вектор заранее неизвестного размера так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru