Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2011, 07:13   #1
KorPaEv
Пользователь
 
Аватар для KorPaEv
 
Регистрация: 08.07.2011
Сообщений: 42
По умолчанию Размер и выделение памяти под открытие файла.

Всем привет.
Уважаемые знатоки, вопрос в следующем)

Значит задача такая, есть некий файл бинарный.
Размер не известный (компилятору). Я его открываю, читаю все что там есть и вывожу на экран.
Подскажите как определить размер этого файла и запихать все что там есть в буфер, который как раз будет динамическим (расширяемым в зависимости от размера файла)?
Ну а затем вывести все это на экран.
Привожу свой код ниже (буфер определяю статическим). Мне это не нужно.
P.S. В перспективе данные файла будут подаваться в реалтайме, поэтому по этому вопросу буду рад выслушать на будущее советы.
Пишу на C++, работаю с потоками поэтому fopen, seeks и т.д мне тоже не нужно.

Код.

Код:
#include <fstream>
#include <iostream>

using namespace std;

const unsigned int buf_size = 0x4000; //вот тут задаю сам буфер

int main()
    {
		char *buffer;

        ifstream f_op("text", ios::binary);
        if (!f_op)
            cerr<<"Error file open";
        else
            cout<<"File open!!! Text this file:\n";

		buffer=new char(buf_size);

        while (!f_op.eof())
            {
            f_op.read((char *)buffer, 1); //читаю по одному байту, тоже плохо какие идеи? В идеале мне читать надо блочно по 4 байта например, для скорости обработки текста.
            cout<<*buffer;
            }
        f_op.close();

		delete buffer;
    }
Created by KorPaEv...

Последний раз редактировалось KorPaEv; 09.09.2011 в 07:16.
KorPaEv вне форума Ответить с цитированием
Старый 09.09.2011, 10:43   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Подскажите как определить размер этого файла
seekg + tellg
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 09.09.2011, 12:01   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

и выделять ничего не надо, и данные всегда под рукой
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 09.09.2011, 12:47   #4
KorPaEv
Пользователь
 
Аватар для KorPaEv
 
Регистрация: 08.07.2011
Сообщений: 42
По умолчанию

Сделал так, всем спасибо!

Код:
#include <fstream> //подключаем заголовок для работы с потоками ввода вывода
#include <iostream>

using namespace std;

int main()
    {
        //резервируем место под буфер
		char *buffer;
		//длинна файла
        int len_file;

        //поток на чтение из файла с параметром бинарника
        ifstream f_op;

        //открываем файл данных для чтения и проверяем открылся ли он
        f_op.open("text", ios::binary);
        if (!f_op)
            cerr<<"Error file open";
        else
            cout<<"File open!!! Text this file:\n";

        //ставлю курсор на конец файла без смещение (0)
        f_op.seekg(0, ios::end);
        //вычисляю кол-во байт до установленного курсора
        len_file=f_op.tellg();
        //помещаю курсор вначало файла
        f_op.seekg(0, ios::beg);

        //заводим массив вычисленной длинны файла
        buffer=new char [len_file];

        //читаю из буфера всю длинну файла
        f_op.read(buffer, len_file);
        //вывожу на экран буфер
        cout<<buffer;

        //закрываю файл
        f_op.close();

        //чистим память
		delete [] buffer;
		return 0;
    }
Created by KorPaEv...
KorPaEv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение памяти под массив указателей Анка291 Общие вопросы C/C++ 9 25.02.2011 00:03
выделение памяти под массив на C Kingdom_Reborn Помощь студентам 12 12.01.2011 04:40
выделение памяти под массив (си скрипт) eduard93 Общие вопросы C/C++ 0 19.12.2010 19:41
динамическое выделение памяти под верхний треугольник квадратной матрицы juventine Помощь студентам 2 12.04.2009 13:02
Динамическое выделение памяти под массивы Артем125 Общие вопросы C/C++ 4 07.04.2009 09:52