fstream >> int не удается? - PullRequest
       13

fstream >> int не удается?

1 голос
/ 01 февраля 2010

Есть идеи, почему следующее не получится?

std::fstream i(L"C:/testlog.txt", std::ios::binary | std::ios::in);
int test = 0;
i >> test;

fail () возвращает true. Файл существует и открыт.

Я проверил i._Filebuffer._Myfile._ptr и это указатель на буфер файла, поэтому я не понимаю, почему он не работает.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Вы открываете файл в двоичном режиме. Операторы извлечения предназначались для использования с текстовыми файлами. Просто оставьте флаг std::ios::binary, чтобы открыть файл в текстовом режиме.

Если у вас действительно есть двоичный файл, используйте вместо него функцию read().

Редактировать : Я тоже это проверял, и действительно, похоже, работает. Я получил это от CPlusPlus.com , где написано:

В двоичных файлах ввод и вывод данных с помощью операторов извлечения и вставки (<< и >>) и таких функций, как getline, неэффективен, поскольку нам не нужно форматировать какие-либо данные, и данные могут не использовать разделение коды, используемые текстовыми файлами для разделения элементов (например, пробел, символ новой строки и т. д.).

Вместе с описанием ios::binary, в котором просто говорится «Рассматривайте поток как двоичный, а не текстовый текст», я совершенно запутался. Этот ответ превращается в собственный вопрос ...

1 голос
/ 01 февраля 2010

следующее:

#include <fstream>
#include <iostream>
using namespace std
int main() {
    std::fstream i("int.dat" , std::ios::binary | std::ios::in);
    int test = 0;
    if ( i >> test  ) {
        cout << "ok" << endl;
    }
}

выводит "ok", если дан файл, содержащий символы "123". Пожалуйста, опубликуйте аналогичный короткий тест, иллюстрирующий сбой вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...