Как использовать разные режимы ifstream в c ++? - PullRequest
1 голос
/ 23 октября 2009
  1. Согласно ссылке, если я использую ifstream infile ( "test.txt" , ifstream::in );, это будет Allow input operations on the stream. Но каковы некоторые примеры "операций ввода"?
  2. Является ли ifstream infile ( "test.txt" , ifstream::in | ifstream::binary ); правильным синтаксисом для использования нескольких флагов?
  3. Будет ли иметь значение, если я поменяю ifstream:: на iso::?

Спасибо

Ответы [ 2 ]

1 голос
/ 23 октября 2009
  1. Согласно ссылке, если я использую ifstream infile ("test.txt", ifstream :: in); Разрешит ввод операции в потоке. Но каковы некоторые из примеров «ввода операции "

Чтение из файла, что будет означать все, что может поддерживать входной поток. См. istream функции-члены. Как правило, вы можете выполнять как форматированное (с использованием >>), так и неформатированное чтение (с использованием read). Помните, что ifstream - это специализация шаблона basic_ifstream для типа char. В зависимости от ваших потребностей, скажем, для чтения файла в кодировке UTF-16, вам, возможно, придется использовать другую специализацию (wifstream) или даже использовать специальную локаль (прочитайте это , чтобы узнать больше о локалях).

  1. Является ли ifstream infile ("test.txt", ifstream :: in | ifstream :: binary); правильный синтаксис для использования нескольких флаги

Да.

  1. Будет ли иметь значение, если я изменю ifstream :: на iso ::?

номер

0 голосов
/ 23 октября 2009

Потоковые операции: extraction << и insertion >>. Когда вы делаете следующее, предполагая file имеет тип fstream:

file << 5 << 6.5 << "Hello World!"; // insertion of data (output)
file >> x >> y >> str; // exaction of data (input)

Вы также можете иметь дело с stream как binary stream. В этом случае это не похоже на «stream» данных, но это дает вам произвольный доступ к данным. В некоторых случаях вы не можете использовать двоичный режим, особенно если ваши данные недоступны как сетевой поток. Вставка и извлечение - это две основные операции над потоками.

ifstream создается как input stream по умолчанию. Таким образом, std::ios::in является избыточным в этом случае. Вы правильно используете флаги.

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

...