Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Не работает бинарный режим


Автор: RinOSpro 27.7.2010, 10:25
Всем привет! Есть проблема... Хочу записать в файл в бинарном режиме а получается в текстовом... вот код:

Код

struct Point
{
    int X;
    int Y;

    friend ofstream& operator << (ofstream& s, const Point &p)
    {
        s << p.X << p.Y;

        return s;
    }
};

.......

    ofstream ofile(filename, ios::binary); 
    ofile << fpoint;


Подскажите плиз, как правильно...?

Автор: djamshud 27.7.2010, 10:37
fwrite :)

И никогда не будет таких проблем.

Автор: RinOSpro 27.7.2010, 10:44
хотелось бы с помощью оператора <<, можно с помощью него?

Автор: Abyx 27.7.2010, 10:45
RinOSpro, в ofstream нет.

Автор: RinOSpro 27.7.2010, 10:50
Цитата(Abyx @  27.7.2010,  10:45 Найти цитируемый пост)
 в ofstream нет.


А с чем да?

Автор: rudvil 27.7.2010, 10:57
http://www.cplusplus.com/doc/tutorial/files/ есть хороший пример.

Автор: RinOSpro 27.7.2010, 11:03
Цитата(rudvil @  27.7.2010,  10:57 Найти цитируемый пост)
Тут есть хороший пример


Там опять же предложено записывать с помощью file.write ((

Автор: rudvil 27.7.2010, 11:36
Цитата(RinOSpro @ 27.7.2010,  11:03)
Цитата(rudvil @  27.7.2010,  10:57 Найти цитируемый пост)
Тут есть хороший пример


Там опять же предложено записывать с помощью file.write ((

Можно так, если уж очень хочется через <<
Код
#include <fstream>
#include <iostream>

/*
 * 
 */

struct binary {

  binary() {
    this->num_ = 0.0;
  }

  binary(double num) {
    this->num_ = num;
  }

  ~binary() {
  }
  double num_;

  friend std::ofstream & operator <<(std::ofstream& s, binary & b) {
    s.write(reinterpret_cast<char *>(&b), sizeof (binary));
    return s;
  }
};

int main(int argc, char* argv[]) {
  // Запись
  {
    binary b(3.14);
    std::ofstream f("C:\\Users\\rudvil\\test.dat", std::ios::binary);
    f << b;
    f.close();
  }
  // Чтение
  {
    binary b;
    std::ifstream f("C:\\Users\\rudvil\\test.dat", std::ios::binary);
    f.read(reinterpret_cast<char *>(&b), sizeof (binary));
    f.close();
    std::cout << b.num_ << "\n";
  }
  std::cout << "\n";
  return 0;
}


Автор: bsa 27.7.2010, 12:36
Цитата(rudvil @  27.7.2010,  12:36 Найти цитируемый пост)
Можно так, если уж очень хочется через <<

Но не нужно!
Цитата(RinOSpro @  27.7.2010,  11:44 Найти цитируемый пост)
хотелось бы с помощью оператора <<, можно с помощью него? 
Мало ли что тебе хочется. Положено это делать через write. И поверь мне, не просто так. Код читается значительно чаще, чем пишется. И если ты будешь писать бинарные данные через <<, то читающий твой код будет в ступоре, так как у него по коду форматированная запись, а по факту двоичная. Таким образом, ты отнимешь у него время на то, чтобы понять, как это у тебя работает.

Автор: RinOSpro 27.7.2010, 13:44
Сделал через write, жаль что стандартно нельзя писать через <<

Всем спасибо!

Автор: bsa 27.7.2010, 14:44
Цитата(RinOSpro @  27.7.2010,  14:44 Найти цитируемый пост)
жаль что стандартно нельзя писать через <<

Как раз не жаль. Потом поймешь.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)