Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1153
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 703
∙ повысить рейтинг »
Matrix
Статус: 3-й класс
Рейтинг: 391
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Номер выпуска:1378
Дата выхода:28.08.2009, 10:05
Администратор рассылки:Dr_Andrew, Модератор
Подписчиков / экспертов:640 / 161
Вопросов / ответов:1 / 1
IRC-канал по теме:#C

Вопрос № 171531: Здравствуйте эксперты, подскажите пожалуйста: 1)Работаю с файлом в двоичном режиме. Как можно установить в файле место чтения в файле, или место записи. В Паскале была команда Seek для типизированных файлов, и можно было считать любую запись, а...



Вопрос № 171531:

Здравствуйте эксперты, подскажите пожалуйста:
1)Работаю с файлом в двоичном режиме. Как можно установить в файле место чтения в файле, или место записи.
В Паскале была команда Seek для типизированных файлов, и можно было считать любую запись, а не все подряд, как здесь мне это сделать
2)Как узнать размер файла?

Отправлен: 22.08.2009, 15:09
Вопрос задал: Tribak, Студент
Всего ответов: 1
Страница вопроса »


Отвечает Micren, Бакалавр :
Здравствуйте, Tribak.
В потоковых классах наследников basic_ostream есть методы seekp(),tellp(), позволяющие установить указатель записи в требуемую позицию, в наследниках basic_istream есть методы seekg(),tellg(). Благодаря множественному наследованию, в классах потомках от basic_iostream есть как методы для установки указателя чтения, так и записи.

Код:

#include <fstream>
#include <iostream>

using namespace std;

// Тестовая структура
class demo_struct
{
public:
demo_struct(int no=0,double d=0)
:_no(no)
,_d(d)
{
}
private:
int _no;
double _d;< br> template<class _Elem> friend basic_ostream<_Elem>& operator<<(basic_ostream<_Elem>& stream,demo_struct& r);
};

template<class _Elem>
basic_ostream<_Elem>& operator<<(basic_ostream<_Elem>& stream,demo_struct& r)
{
stream<<r._no<<"->"<<r._d<<endl;
return stream;
}

int main()
{
// Открываем двоичный поток для чтения/записи
fstream stream("e:\\demo",ios::in|ios::out|ios::binary|ios::trunc);

// Пишем 4 структуры
stream.write(reinterpret_cast<char*>(&demo_struct(1,0.1)),sizeof(demo_struct));
stream.write(reinterpret_cast<char*>(&demo_struct(2,0.2)),sizeof(demo_struct));
stream.write(reinterpret_cast<char*>(&demo_struct(3,0.3)),sizeof(demo_struct));
stream.write(reinterpret_cast<char*>(&demo_struct(4,0.4)),sizeof(demo_struct));
stream.write(reinterpret_cast<char*>(&demo_struct(5,0.5) ),sizeof(demo_struct));

stream.flush();

// Установим указатель на конец потока
stream.seekg(0,ios::end);
// Получим значение указателя. Это размер потока.
streamoff size=stream.tellg();
cout<<"size="<<size<<endl;

// Указатель чтения на 3-ю запись
stream.seekg(sizeof(demo_struct)*2);

demo_struct d;
// Читаем
stream.read(reinterpret_cast<char*>(&d),sizeof(demo_struct));

// Выводим для проверки
cout<<d;

return 0;
}


Код:

size=80
3->0.3

Ответ отправил: Micren, Бакалавр
Ответ отправлен: 22.08.2009, 14:13

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253460 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.7 от 15.08.2009

    В избранное