Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886

Скопировать поток в поток

24.10.2013, 01:06. Показов 4625. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли возможность скопировать один поток в другой.


Например

C++
1
2
3
4
5
int main()
{
   ofstream (*P) = new ofstream;
   ofstream out("C:\123.txt");
}
и нужно, чтобы поток out был скопирован в поток, на который указывает указатель.

Не по теме:

возможно трактовка неправильно поставлена, но надеюсь чего я хочу узнать понятно.



в общем чтобы можно было делать как-то так
C++
1
2
3
4
5
6
int main()
{
   ofstream (*P) = new ofstream;
   ofstream out("C:\123.txt");
      *P<<555;
}
Добавлено через 1 минуту
и 555 записывалось в 123.txt
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2013, 01:06
Ответы с готовыми решениями:

Скопировать поток и добавить ошибки в поток
Здорова господа! Есть задачка: &quot;Скопируйте поток объектов типа Name_and_address и вставьте в него столько ошибок, сколько сколько...

Нужно переделать программу, которая создает поток.Родительский и вновь созданный поток должны распечатать десять строк
Напишите программу, которая создает поток. Используйте атрибуты по умолчанию. Родительский и вновь созданный поток должны распечатать...

Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции.
Совсем не понял эту тему. Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде...

15
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
24.10.2013, 01:25
так чтоли?
C++
1
2
3
4
5
6
int main()
{
   ofstream out("C:\123.txt");
   ofstream* P = &out;
   *P<<555;
}
если нет, то вопрос неясен. вам перенаправление потоков нужно или что?
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
24.10.2013, 01:28  [ТС]
нет.
нужно чтобы адреса различались.
У *P свой адрес
У out свой

а это вот сейчас не копирование совсем.

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
перенаправление потоков нужно или что?
наверное.

я не знаю.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
24.10.2013, 01:38
перенаправление потоков - вещь хитрая (по крайней мере для меня). там муть с буферами ввода и т.д. и т.п.
может вам что-то другое нужно все-таки. попробуйте задачу в целом описать.
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
24.10.2013, 01:52  [ТС]
Наверное кодом объяснить проще чем словами

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void myfunc(ofstream *&P)
{
    ofstream out("C:/123.txt"); //может слеш перепутан, это неважно сейчас    
    P=&out; //теперь если out уничтожится, P указывает вникуда
       
} //вот и все, P указывает вникуда 
 
 
void func2(ofstream *P)
{
    *P<<555; 
}
 
int main() {    
   ofstream *P = new ofstream;
      myfunc(P); //по завершению P вникуда
      func2(P);  //упали
 
return 0;
}
Добавлено через 1 минуту
Чтобы избежать падения нужно что-то сделать. Я и подумал: "если скопировать данные из одного потока в другой, модет быть получится"
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
24.10.2013, 02:01
смарт-поинтеры возможно вам помогут:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef std::unique_ptr<std::ostream> OStreamPtr;
 
void myfunc(OStreamPtr& p)
{
  p.reset(new std::ofstream("C:/123.txt"));
}
 
void func2(std::ostream& P)
{
  P << 555; 
}
 
int main() {    
  OStreamPtr P; // пока никуда не указываем.
  myfunc(P);
  func2(*P); // если внутри не пересоздается стрим, то передаем просто по ссылке, иначе - ссылку на smartptr
  return 0;
}
можно еще std::shared_ptr. но для приведенного кода это лишнее. прокатит и std::unique_ptr.
если в рамках старого стандарта, то пойдет и std::auto_ptr вместо std::unique_ptr.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
24.10.2013, 02:04  [ТС]
include <чего-то там> быть должно?

в таком виде у меня не компилируется
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
24.10.2013, 02:07
#include <memory>
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
24.10.2013, 02:12  [ТС]
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp |8|error: 'unique_ptr' in namespace 'std' does not name a type|
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp |10|error: variable or field 'myfunc' declared void|
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp |10|error: 'OStreamPtr' was not declared in this scope|
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp |10|error: 'p' was not declared in this scope|
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp ||In function 'int main()':|
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp |21|error: 'OStreamPtr' was not declared in this scope|
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp |21|error: expected ';' before 'P'|
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp |22|error: 'P' was not declared in this scope|
C:\CPP\MyProject\MyProjectFile\MyCPP.cpp |22|error: 'myfunc' was not declared in this scope|
||=== Build finished: 8 errors, 0 warnings (0 minutes, 2 seconds) ===|
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
24.10.2013, 02:15
ну хз что вы там написали и хз какой у вас компилятор. я написал, что если стандарт старый - то auto_ptr:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <fstream>
#include <memory>
 
//typedef std::unique_ptr<std::ostream> OStreamPtr;
typedef std::auto_ptr<std::ostream> OStreamPtr;
 
void myfunc(OStreamPtr& p)
{
  p.reset(new std::ofstream("C:/123.txt"));
}
 
void func2(std::ostream& P)
{
  P << 555; 
}
 
int main()
{
  OStreamPtr P; // пока никуда не указываем.
  myfunc(P);
  func2(*P); // если внутри не пересоздается стрим, то передаем просто по ссылке, иначе - ссылку на smartptr
  return 0;
}
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
24.10.2013, 02:35  [ТС]
Ясно. спасибо.

т.к. сейчас не до конца понимаю этот вариант. есть вопрос.
Здесь потоки закрывать не нужно по аналогии с файловыми потоками?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 02:48
daslex, зачем вам нужно поток именно в функции создавать?
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
24.10.2013, 02:57  [ТС]
мне как бы и не нужно. Зачем может быть нужно понятия не имею.
просто знать хочу.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 02:58
Или такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ofstream* myfunc()
{
    ofstream *P = new ofstream("C:/123.txt");
    return P;
} 
 
 
void func2(ofstream *P)
{
    *P << 555; 
}
 
 
int main()
{
    ofstream *P = myfunc();
    func2(P); 
    
    delete P;
}
Добавлено через 58 секунд
Цитата Сообщение от daslex Посмотреть сообщение
просто знать хочу
Можно ли копировать потоки? Или это?:
Цитата Сообщение от daslex Посмотреть сообщение
Чтобы избежать падения нужно что-то сделать.
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.10.2013, 03:03
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <vector>
 
int main()
{
    std::ofstream ofs("output.txt");
    std::vector<std::streambuf *> v;
    v.push_back(std::cout.rdbuf());
    v.push_back(ofs.rdbuf());
 
    std::ostream out(*v.begin());
    for (std::vector<std::streambuf *>::iterator it = v.begin(); it != v.end(); ++it)
    {
        out.rdbuf(*it);
        out << "Hello world!";
    }
}
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
24.10.2013, 03:08  [ТС]
В общем я не знал как, поэтому спросил как в голову пришло, чтобы было поближе к смыслу.

Спросил - узнал более чем 2 варианта. Цель более чем достигнута.
Знание получено.

Не по теме:

у меня кнопки спасибо закончились. как появятся нажму.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2013, 03:08
Помогаю со студенческими работами здесь

STL и поток
Есть вектор, объявленный в основной программе, состоящий из ссылок на компоненты типа TImage и TCheckBox: struct mass { TImage *img; ...

Очистить поток
Хотел с помощью куска кода (см.ниже) очистить буфер связанный с потоком cin. Но выражение в скобках по какой-то причине не изменяется? ...

Поток с GetMessage
Привет всем. У меня в программе в отдельном потоке имеется такой код: while(GetMessage(&amp;msg,0,0,0) { ...

поток (stream)
расскажите подробно про работу потока

Указатель на поток
void qwe(ifstream *file) { int ch; (*file) &gt;&gt; ch; } int main() { ifstream ifile (&quot;abc.txt&quot;); ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru