Страница 1 из 1

C++ работа с файлами (код писать не надо - нужна консультация)

Добавлено: 05 июн 2008, 13:48
Дайне
Доброе время суток. Прошу рассказать или дать ссылку где можно подробно почитать (желательно на русском) по ниже описаному вопросу:
Можно ли средствами С++ записать в файл не текстовую информацию и считывать ее потом тоже не как текст. Конкретно - есть необходимость загнать в файл некоторое количество векторов (одна программа), а потом их считывать(друграя программа).
Заранее спасибо.

Re: C++ работа с файлами (код писать не надо - нужна консультация)

Добавлено: 05 июн 2008, 15:20
Developer
Да, конечно можно.

при открытии файла - fopen( FileName, "wb"); /* wb = Write Binary */
Затем писать в файл функцией

fwrite(Buf, size, count, F);
где
Buf - переменная, массив и тп
size - сколько байт писать( если к примеру пишем в файл int - лучше sizeof(int) писать тут)
count - то, сколько раз мы пишем блоки по size байт
F - файл, куда пишем

Для чтения - аналогично
fopen(FileName, "rb"); /* rb = ReadBinary */
fread(Buf, size, count, F); - всё аналогично

Re: C++ работа с файлами (код писать не надо - нужна консультация)

Добавлено: 05 июн 2008, 16:57
Дайне
Спасибо.
Вопрос в продолжение - векторы имеют разный размер и я заранее не знаю какой размер у следующего. Тем более класс вектор на сколько я знаю хранит еще переменную отвечающую за размер (возможно и иные переменные, я еще не докопался) - как быть здесь?

Предположение: создаем пустой вектор, читаем первых 4 байта которые принимаются как размер N нашего вектора. Потом в цикле от 1 до N считываем по 4 байта отдельные числа и с помощью метода push_back() добавлять к нашему вектору.

Предположение, конечно, верное если считать что вектор записывается именно таким образом: размер элемент1 элемент2 элемент3 и т.д.

Но еще такой момент - мне понадобиться считывать вектора не попорядку, а например следующий за данным или предидущий, или через 3 вектора от данного.
Может в файл лучше записывать одномерные массивы одинакового большого размера, а потом считывать их элементы и методом push_back() добавлять к нашему вектору?

Re: C++ работа с файлами (код писать не надо - нужна консультация)

Добавлено: 05 июн 2008, 18:12
Developer
Если указывается размер, то писать в файл так-
fwrite(Vek, size, 1, F);
Он запишет size байт, т.е. всю структуру. (Если я вас верно понял)

А насчет как лучше писать - это уже от программы зависит - ведь можно писать весь массив, прочитать в другой проге его и взять нужные элементы

Re: C++ работа с файлами (код писать не надо - нужна консультация)

Добавлено: 05 июн 2008, 18:27
Дайне
Весь массив писать и потом считывать его будет не совсем симпатично - около 230k векторов каждый от 2 до 37 элементов типа integer. И держать такую громаду в оперативке нет желания)) тем более сама программа еще что-то делать будет.
Но я вроде разобрался что и куда "клеить". Спасибо!

Re: C++ работа с файлами (код писать не надо - нужна консультация)

Добавлено: 05 июн 2008, 22:36
Developer
Хм - если нужен Nй элемент можно еще использовать fseek();
не помню порядка - но там надо
1)F - файл
2)Pos - позиция

Просто считываем размер следующего вектора и смещаемся на эту величину
и тп

What hosting to choose?

Добавлено: 12 окт 2015, 23:07
GeorgeSoca
On our web, you can feel safe! Besides we use mirrored hard drives on all of our servers so we also take backup twice a day on separate servers. We use ISPmanager as the control panel. ISPmanager is a control panel that makes it easy to administer its Web site. With us you can place as many websites and domains you wish for a hosting account.
virtual hosting