Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44

ifstream / ofstream - exceptions кроме eof

26.09.2024, 14:04. Показов 2592. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хотелось бы иметь возможность пользоваться ifstream / ofstream таким образом, чтобы по умолчанию была включена генерация исключений при ошибках ввода / вывода, но при этом не возникало бы исключения, если достигнут конец файла.

Попробовал набросать классы:

TMyFstream.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#pragma once
#include <string>
#include <fstream>
 
using namespace std;
 
template<class T>
class TMyFStreamBase : public T
{
  protected:
    void init(void)
    {
        ios_base::iostate em = T::exceptions() | ios::failbit;
        T::exceptions(em);
    }
 
  public:
    TMyFStreamBase(string fspec)
    {
        init();
        T::open(fspec);
    }
 
    TMyFStreamBase(string fspec, ios_base::openmode mode)
    {
        init();
        T::open(fspec, mode);
    }
};
 
class TMyIFStream : public TMyFStreamBase<ifstream>
{
  public:
    TMyIFStream(string fspec):
        TMyFStreamBase(fspec)
    {
    }
 
    TMyIFStream(string fspec, ios_base::openmode mode):
        TMyFStreamBase(fspec, mode)
    {
    }
 
    template <class U> TMyIFStream &operator>>(U &value)
    {
        try
        {
            *(ifstream*)this >> value;
        }
        catch (const ios_base::failure &ex)
        {
            if (!eof())
            { // Бросаем исключение, только если это не конец файла
                throw;
            }
        }
 
        return *this;
    }
};
 
class TMyOFStream : public TMyFStreamBase<ofstream>
{
  public:
    TMyOFStream(string fspec):
        TMyFStreamBase(fspec)
    {
    }
 
    TMyOFStream(string fspec, ios_base::openmode mode):
        TMyFStreamBase(fspec, mode)
    {
    }
};
Использование:
C++
1
2
3
4
5
6
7
8
TMyIFStream ksf(s_file, ios::binary);
 
...
 
while (ksf >> (*ccp))
{
...
}
- Работает, но чувствую, есть более правильный и универсальный подход. И хотелось бы пользоваться ещё методом read чтобы прочитать нужное количество байт в начале файла, а это ещё одна перегруженная функция.

Посоветуйте.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2024, 14:04
Ответы с готовыми решениями:

ifstream / ofstream
Доброго времени суток. И сразу к проблеме. Делаю вывод в файл объектов класса для их последующего считывания и обрабатывания. ...

[ifstream][ofstream] Косячит при выводе. Работа с pnm форматом. (p5)
Добрый вечер форумчане! Работаю я с pnm форматом. Проблема возникает при выводе через ofstream, а если быть точнее, то он делает...

ifstream ofstream
как работают данные файловые операции, объясните пожалуйста куда происходит запись ена жёстком диске

19
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
26.09.2024, 16:59
Всё уже продумано до вас :
https://cplusplus.com/referenc... xceptions/
https://en.cppreference.com/w/... exceptions

Добавлено через 2 минуты
И собственно табличка по набору флагов : en.cppreference.com/w/cpp/io/ios_base/iostate#See_also
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
26.09.2024, 19:01  [ТС]
Да, но всё равно не понятно, как сделать, чтоб исключения генерились только в случае
Code
1
!eofbit && (failbit || badbit)
(смотрю на красно-зелёную таблицу из последней ссылки).
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
26.09.2024, 19:40
Цитата Сообщение от ZenBooster Посмотреть сообщение
(смотрю на красно-зелёную таблицу из последней ссылки).
Таблица - это другое, просто для понимания за что отвечают эти флаги.

По первой ссылки же пример, как раз тот что вам нужен.

C++
1
file.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
27.09.2024, 13:17  [ТС]
Вот этот пример как раз не работает.

Немного изменил его, чтоб запустить в onlinegdb:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<string>
#include<iostream>
#include<fstream>
 
using namespace std;
 
int main()
{
    {
        ofstream fo("1");
 
        fo << "12345";
    }
    
    ifstream fi;
    fi.exceptions (ifstream::failbit | ifstream::badbit);
 
    cout << "HIT.1" << endl;
    fi.open("1");
    cout << "HIT.2" << endl;
    while(!fi.eof())
    {
        cout << (char)fi.get();
        flush(cout);
    }
    cout << endl;
}
И вот, что я получил:
Code
1
2
3
4
HIT.1
HIT.2
12345terminate called after throwing an instance of 'std::__ios_failure'
  what():  basic_ios::clear: iostream error
https://onlinegdb.com/XO8n14mIx
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 13:50
ZenBooster, многие функции, такие как get() устанавливают и eofbit и failbit, поэтому и срабатывает исключение.
Пример :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ios::exceptions
#include <iostream>     // std::cerr
#include <sstream>
 
int main () {
   try {
      int n; 
      std::istringstream buf("1");
      buf.exceptions ( std::ios_base::failbit | std::ios_base::badbit);
      buf >> n; // eofset 
      if (buf.eof())
         std::cout << "End of file is reached.\n";
   }
   catch (std::ios_base::failure e) {
      std::cout << std::endl;
      std::cout << e.what();
   }
}
Вы бы лучше описали желаемое поведение.

Цитата Сообщение от ZenBooster Посмотреть сообщение
Вот этот пример как раз не работает.
Он работает, просто много функций, работают не так как вы ожидаете.

Добавлено через 10 минут
ZenBooster, ещё один пример, где eofbit есть - исключения нет :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<string>
#include<iostream>
#include<fstream>
 
using namespace std;
 
int main()
{
    {
        ofstream fo("1");
 
        fo << "12345";
    }
    
    ifstream fi;
    fi.exceptions (ifstream::failbit | ifstream::badbit);
 
    cout << "HIT.1" << endl;
    fi.open("1");
    cout << "HIT.2" << endl;
    char buf[100];
    while(!fi.eof())
    {
       fi >> buf;
       cout << buf;
       flush(cout);
    }
    cout << endl;
}
Добавлено через 2 минуты
ZenBooster, мне кажется, или вы очередной искатель который хочет поведения работы с файлами как в Pascal ? )

Добавлено через 2 минуты
p.s. Добавьте в последнем примере ifstream::eofbit в установку исключений и при выполнении получите исключение.
То есть, на ваш прямой вопрос, пост №2, удовлетворяет полностью.
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
27.09.2024, 13:53  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Вы бы лучше описали желаемое поведение.
В первом посте описал. Конкретно в этом примере, хотелось бы, что бы при достижении конца файла при чтении не возникало исключение, а во всех остальных положенных случаях возникало бы. Т.е. хотелось бы использовать циклы для чтения как раньше, но при этом не проверять открылся ли файл, не возникло ли какой другой ошибки ввода-вывода...

Это можно было бы сделать вот так:
C++
1
2
fi.exceptions (ifstream::failbit | ifstream::badbit);
fi.except_of_exceptions (ifstream::eofbit);
Но к сожалению, stl не предлагает такого интерфейса.

Пока что, получилось вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#pragma once
#include <string>
#include <fstream>
 
namespace common
{
using namespace std;
 
template<class T>
class TMyFStreamBase : public T
{
  protected:
    void init(void)
    {
        ios_base::iostate em = T::exceptions() | ios::failbit;
        T::exceptions(em);
    }
 
  public:
    TMyFStreamBase(string fspec)
    {
        init();
        T::open(fspec);
    }
 
    TMyFStreamBase(string fspec, ios_base::openmode mode)
    {
        init();
        T::open(fspec, mode);
    }
};
 
class TMyIFStream : protected TMyFStreamBase<basic_ifstream<char>>
{
  public:
    TMyIFStream(string fspec):
        TMyFStreamBase(fspec)
    {
    }
 
    TMyIFStream(string fspec, ios_base::openmode mode):
        TMyFStreamBase(fspec, mode)
    {
    }
 
    template <class U>
    basic_istream<char> &operator>>(U &value)
    {
        try
        {
            *(basic_ifstream<char>*)this >> value;
        }
        catch (const ios_base::failure &ex)
        {
            if (!eof())
            { // Бросаем исключение, только если это не конец файла
                throw;
            }
        }
 
        return *this;
    }
 
    basic_istream<char> &read(char *s, streamsize n)
    {
        try
        {
            ((basic_ifstream*)this)->read(s, n);
        }
        catch (const ios_base::failure &ex)
        {
            if (!eof())
            { // Бросаем исключение, только если это не конец файла
                throw;
            }
        }
 
        return *this;
    }
 
    void read_all(basic_ostream<char> &dst)
    {
        try
        {
            //dst << rdbuf();
            copy(
                istreambuf_iterator<char>(*this),
                istreambuf_iterator<char>(),
                ostreambuf_iterator<char>(dst)
            );
        }
        catch (const ios_base::failure &ex)
        {
            if (!eof())
            { // Бросаем исключение, только если это не конец файла
                throw;
            }
        }
    }
};
 
class TMyOFStream : public TMyFStreamBase<basic_ofstream<char>>
{
  public:
    TMyOFStream(string fspec):
        TMyFStreamBase(fspec)
    {
    }
 
    TMyOFStream(string fspec, ios_base::openmode mode):
        TMyFStreamBase(fspec, mode)
    {
    }
};
}
Для целей проекта (статическая библиотека, которую юзают разные консольные утилиты) хватает. Но есть сомнения...
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 14:01
Зачем вы всё так усложняете, работая через исключения, через состояние потока куда проще и экономнее ?
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
27.09.2024, 14:02  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
ZenBooster, мне кажется, или вы очередной искатель который хочет поведения работы с файлами как в Pascal ? )
Я так давно не писал на Паскале, что уже и не помню всех особенностей. Но было бы удобно работать с файлами как обычно, но не делать проверок всяких. Возникло исключение - сообщили пользователю.

Цитата Сообщение от SmallEvil Посмотреть сообщение
p.s. Добавьте в последнем примере ifstream::eofbit в установку исключений и при выполнении получите исключение.
То есть, на ваш прямой вопрос, пост №2, удовлетворяет полностью.
Так я и так получаю исключение когда достигаю конца файла, и добавление ifstream::eofbit никак не влияет на ситуацию.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 14:13
К тому же, откуда вызывающая сторона через метод TMyFStreamBase::read будет знать сколько данных прочиталось ???

Добавлено через 1 минуту
Какой то вы "гемор" придумали, ещё похуже чем в STL.

Добавлено через 1 минуту
Цитата Сообщение от ZenBooster Посмотреть сообщение
Так я и так получаю исключение когда достигаю конца файла, и добавление ifstream::eofbit никак не влияет на ситуацию.
Я про свои последние два примера из поста №6.

Цитата Сообщение от ZenBooster Посмотреть сообщение
Но было бы удобно работать с файлами как обычно, но не делать проверок всяких.
Это как ? Я не понимаю.

Добавлено через 7 минут
Цитата Сообщение от ZenBooster Посмотреть сообщение
Я так давно не писал на Паскале, что уже и не помню всех особенностей.
Там все файлы - типизированные.
В С++ нет типизированных файлов.
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
27.09.2024, 14:55  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
К тому же, откуда вызывающая сторона через метод TMyFStreamBase::read будет знать сколько данных прочиталось ???
А как обычно происходит?

https://en.cppreference.com/w/... tream/read
Code
1
The number of successfully extracted characters can be queried using gcount().
Цитата Сообщение от SmallEvil Посмотреть сообщение
Я про свои последние два примера из поста №6.
А, там да. Но мне больше интересна ситуация, когда файл читается за несколько итераций. Например, если будет не
C++
1
char buf[100];
а
C++
1
char buf;
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это как ? Я не понимаю.
Это когда можно написать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<string>
#include<iostream>
#include<fstream>
 
using namespace std;
 
int main()
{
    {
        ofstream fo("1");
 
        fo << "12345";
    }
    
    ifstream fi;
    //fi.exceptions (ifstream::failbit);
 
    fi.open("1");
 
    char c;
    while(fi >> c)
    {
        cout << c;
        flush(cout);
    }
    cout << endl;
}
вместо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<string>
#include<cstring>
#include<iostream>
#include<fstream>
 
using namespace std;
 
int main()
{
    {
        ofstream fo("1");
        
        if(!fo)
        {
            cerr << strerror(errno) << endl;
            return 1;
        }
 
        fo << "12345";
 
        if(!fo)
        {
            cerr << strerror(errno) << endl;
            return 1;
        }
    }
    
    ifstream fi("1");
    
    if(!fi)
    {
        cerr << strerror(errno) << endl;
        return 1;
    }
 
    char c;
    while(fi >> c)
    {
        cout << c;
        flush(cout);
    }
 
    if (!fi && !fi.eof())
    {
        cerr << strerror(errno) << endl;
        return 1;
    }
    cout << endl;
}
Цитата Сообщение от SmallEvil Посмотреть сообщение
Какой то вы "гемор" придумали, ещё похуже чем в STL.
Возможно...
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 15:07

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
Сообщение от ZenBooster
Я так давно не писал на Паскале, что уже и не помню всех особенностей.
Там все файлы - типизированные.
Вспомнил, ещё есть текстовые.



Цитата Сообщение от ZenBooster Посмотреть сообщение
Это когда можно написать
Вы хотите и рыбку съесть и работу не делать
Для этого, ваша обертка, должна читать данные наперед и отдавать их по запросу.
Иначе, с не типизированными файлами, не получится. По крайней мере со STL потоками.

Добавлено через 2 минуты
Цитата Сообщение от ZenBooster Посмотреть сообщение
А как обычно происходит?
Так как было море "удовольствия", так и останется
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
27.09.2024, 15:11  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Вспомнил, ещё есть текстовые.
Да, я теперь тоже припоминаю.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Для этого, ваша обертка, должна читать данные наперед и отдавать их по запросу.
Иначе, с не типизированными файлами, не получится. По крайней мере со STL потоками.
Ну почему же. Достаточно перехватывать исключения, и пробрасывать их только в том случае, если у нас не достигнут конец файла. Просто я попытался всё это сделать скрытно от глаз, внутри обёртки.

Лень - двигатель прогресса )
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 15:22
Цитата Сообщение от ZenBooster Посмотреть сообщение
Ну почему же.
По качану )
Потому что ни вы и ни поток не будет знать, что конец файла уже достигнут.
Поэтому у вас будет такое же самое поведение как и у стандартных потоков, потому что (вам лень) вы ничего не делаете.
Плюс добавили работу с исключениями, там где это вовсе не нужно.
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
27.09.2024, 15:36  [ТС]
Лишнее исключение на быстродействии не скажется. Диск всяко медленнее. Зато код писать удобней )
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 15:58
Цитата Сообщение от ZenBooster Посмотреть сообщение
Зато код писать удобней )
https://onlinegdb.com/yx7HAEmXJ
И что мы видим, что у вас классическая распространенная ошибка по использованию eof() : последний символ читается дважды : "Hello World""

Можете допилить, наверное, но это такое себе.
Ещё раз повторю, что бы использовать в таком варианте как while(F.Eof()){readdata;} именно с потоками, вам придется сначала читать данные, а лишь потом их отдавать при чтении, но если мы не знаем что пользователь читает(в отличии от типизированных файлов), как в стандартных потоках, то мы этого сделать не можем в априори.

Пока (дальше продолжать не буду) сделал простенький пример работы с типизированными файлами,
и только для fstream :
https://onlinegdb.com/owJdNH3Z8
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <fstream>
#include <string>
#include <ios>
 
// типизированный файл
template<class Stream, class Type>
struct FileStream {
   FileStream(const std::string filename) 
      : file(filename, std::ios::ios_base::binary 
                     | std::ios::ios_base::in
                     | std::ios::ios_base::out){
      if (!file.is_open())
         throw std::ios_base::failure("FileStream: File not opened.");
      GetFileSize();
      readed = 0;
   }
   FileStream& Read(Type& obj){
      ReadData(obj);
      return *this;
   }
   
   // write to the current posution (now it's always begin of file)
   FileStream& Write(const Type& obj){
      if ( !file.write((const char*)&obj, sizeof(obj)) )
         throw std::ios_base::failure("FileStream: file write error.");
      return *this;
   }
 
   bool Eof(){
      return size - readed == 0;
   }
private:   
   void ReadData(Type& obj){
      file.read((char*)&obj, sizeof(Type));
      readed += file.gcount();
      if (file.gcount() != sizeof(Type))
         throw std::ios_base::failure("FileStream: Read data error.");
   }
   void GetFileSize(){
      file.seekg(0, std::ios_base::end);
      size = file.tellg();
      file.seekg(0, std::ios_base::beg);
   }
   Stream file;
   size_t size;
   size_t readed;
};
 
int main()
{
   using datatype = char;
   std::string filename = "data.bin";
   // write section
   {
      try{
         FileStream<std::fstream, datatype> f(filename);
         for(auto &ch : std::string("hello world"))
            f.Write(ch);
      }catch(std::ios_base::failure e){
         std::cout << e.what() << std::endl;
      }
   }
   //read section
   {
      try{
         FileStream<std::fstream, datatype> f(filename);
         datatype d;
         while(!f.Eof()){
            f.Read(d);
            std::cout << d;
         }
      }catch(std::ios_base::failure e){
         std::cout << e.what() << std::endl;
      }
   }
}
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
27.09.2024, 16:07  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
И что мы видим, что у вас классическая распространенная ошибка по использованию eof() : последний символ читается дважды : "Hello World""
Если заменить
C++
1
common::TMyIFStream f("input.txt");
на
C++
1
std::ifstream f("input.txt");
то ошибка остаётся.

Я бы переделал цикл:
C++
1
2
3
while(f.read(&ch, 1)) {
    std::cout << ch;
}
- тогда всё будет в порядке.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 16:27
Цитата Сообщение от ZenBooster Посмотреть сообщение
Я бы переделал цикл:
Так и при чем тут eof вообще ? И ваша обертка зачем ? Что бы пользователь ипался с исключениями ?
Я же писал :
Цитата Сообщение от SmallEvil Посмотреть сообщение
через состояние потока куда проще и экономнее ?
Вода в ступе кончилась ...

Добавлено через 3 минуты
Цитата Сообщение от ZenBooster Посмотреть сообщение
то ошибка остаётся.
Ну да, вы что совсем не читаете что я вам пишу ?
Цитата Сообщение от SmallEvil Посмотреть сообщение
что у вас классическая распространенная ошибка по использованию eof()
Или вы просто пришли : "А пагаварить ?"
0
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
27.09.2024, 17:05  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Так и при чем тут eof вообще ? И ваша обертка зачем ? Что бы пользователь ипался с исключениями ?
Я же писал :
Цитата Сообщение от SmallEvil Посмотреть сообщение
через состояние потока куда проще и экономнее ?
Я же привёл пример в посте 11 как выглядит код если опираться только на состояние потока, и не использовать исключения. Да, я хочу использовать состояние потока, когда читаю элементы из файла пока они не закончатся, и хочу использовать исключения для обработки ошибок. Ваш пример по работе с типизированными файлами интересен, но у меня в реальном проекте инсертор перегружен для чтения и записи в файл сложного объекта.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Ну да, вы что совсем не читаете что я вам пишу ?
Упс, не внимательно прочитал. Понял про какую ошибку шла речь. Главное понимать, почему так происходит... Лично мне не мешает.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.09.2024, 18:42
Цитата Сообщение от ZenBooster Посмотреть сообщение
Я же привёл пример в посте 11
Понятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2024, 18:42
Помогаю со студенческими работами здесь

Ошибка с ofstream и ifstream
Выдаёт ошибки на ofstream F и ifstream G . Много пересмотрел материалов , но ответа на вопрос не нашел . Прошу вашей помощи. float...

Ошибка с ifstream и ofstream
Если коротко, нужно считать текст из файла. Ввести какое на какое слово заменить. Заменить. И записать обратно в файл. Выдает ошибку. Не...

C++ файлы ifstream/ofstream
Доброе время суток нужна небольшая помощь с записью/считыванием из файла вообщем при считывание из файла eof() не определяет конца файла и...

ifstream/ofstream/fstream
#include &lt;fstream&gt; fstream autosave; autosave.open(&quot;...autosave.txt&quot;); char x; autosave &lt;&lt; x; cout &gt;&gt;...

Перегрузка ifstream и ofstream?
Есть класс //test.h cass test { private: int i; string st; public:


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru