Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
02.04.2012, 11:09     Чтение файла неизвестного размера #1
Необходимо прочитать файл неизвестного размера, динамически растягивая массив, загнать файл в массив и узнать его размер. Приведите пожалуйста пример кода на Си или Си++. Я пробовал играться с realloc'ом, но не выходит. Что-то не так делаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2012, 11:09     Чтение файла неизвестного размера
Посмотрите здесь:

C++ Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
Из текстового файла неизвестного размера вывести на экран все предложения, не содержащие запятых C++
Массив заранее неизвестного размера C++
Умножение матрицы неизвестного размера C++
Исследование "неизвестного" формата (отрезать начало файла до определённого заголовка) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
02.04.2012, 12:41     Чтение файла неизвестного размера #2
а если использовать std::vector?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 12:44     Чтение файла неизвестного размера #3
Покажи, как игрался?
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
02.04.2012, 12:56     Чтение файла неизвестного размера #4
Цитата Сообщение от Frostegater Посмотреть сообщение
но не выходит
Что именно не выходит? И каков порядок величины файла?
А вообще-то есть функция filelength
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
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 символа а в файле они имеются (ну нули)..
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 13:11     Чтение файла неизвестного размера #6
Цитата Сообщение от Frostegater Посмотреть сообщение
считает до EOF символа а в файле они имеются (ну нули)
EOF != 0
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
02.04.2012, 13:28  [ТС]     Чтение файла неизвестного размера #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
EOF != 0
хм незнал.. но суть в том, что strlen определяет размер до следующего нуля
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
02.04.2012, 13:29     Чтение файла неизвестного размера #8
http://www.cyberforum.ru/cpp-beginne...ml#post2240784
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 13:40     Чтение файла неизвестного размера #9
Цитата Сообщение от Frostegater Посмотреть сообщение
хм незнал..
sizeof(EOF) > sizeof(char). В два раза, примерно...
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
03.04.2012, 10:24  [ТС]     Чтение файла неизвестного размера #10
Цитата Сообщение от Петррр Посмотреть сообщение
там чтение текстового файла (без нулевых байтов), а мне нужно прочитать бинарник и так чтоб загнать в массив.. и последующем работать с ним. Я пробовал делать громадный массив char arr[0xFFFFFF], но вылетает с ошибкой.. в общем, не умею я работать с динамической памятью. Манов начитался уйму. Понял, но сделать не могу. Помогите пжл, но только на маны не шлите, уже тошнит..
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2012, 14:19     Чтение файла неизвестного размера
Еще ссылки по теме:

C++ Как обьявить массив неизвестного размера?
Ввод и вывод строки неизвестного размера C++
C++ Массив неизвестного размера

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

Или воспользуйтесь поиском по форуму:
Flash_Zero
3 / 3 / 1
Регистрация: 07.03.2012
Сообщений: 5
03.04.2012, 14:19     Чтение файла неизвестного размера #12
Frostegater,

Не по теме:

Кого мы видим

Yandex
Объявления
03.04.2012, 14:19     Чтение файла неизвестного размера
Ответ Создать тему
Опции темы

Текущее время: 16:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru