Можно ли прочитать файл без использования переменных (которые временно содержат данные) - PullRequest
0 голосов
/ 20 марта 2020

Я хотел бы знать, есть ли способ открыть файл в C ++ с использованием класса ifstream, чтобы прочитать файл с наименьшим «многословным» способом (под словом «я» я подразумеваю много / избыточных команд) .I ' Мы видели примеры, когда открывают файл для чтения и используют следующую концепцию:

//commands
ifstream fin("data.txt");
char ch;
while(fin){
   fin >> ch;
   cout << ch;
}

Нечто подобное происходит при использовании функции getline(), было бы полезно, если бы была функция, возвращающая значение это то, что было прочитано из istream (stdin или file).

Буду признателен за несколько примеров использования C и C ++

Спасибо за ваше время!

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Самое близкое соответствие для вашего кода, которое я могу придумать в C, будет использовать fgetc и fputc:

#include <stdio.h>

int main()
{
    FILE* file = fopen("file.txt", "r");
    int ch = fgetc(file);
    while(ch != EOF)
    {
        fputc(ch, stdout);
        ch = fgetc(file);
    }
}

В реальном код, вам нужно было бы сделать большую проверку, что операции ввода-вывода прошли хорошо - например, если fopen успешно. Вы также можете взглянуть на fgets и fputs.

0 голосов
/ 20 марта 2020

Если все, что вы хотите сделать, это передать содержимое файла на стандартный вывод, вы можете использовать потоковый итератор, например, так:

#include <iostream>
#include <iterator>
#include <fstream>
#include <algorithm>
#include <string>

int main( int argc, char **argv )
{
  std::ifstream fin( argv[1] );
  std::copy( std::istreambuf_iterator< char >( fin ),
             std::istreambuf_iterator< char >(),
             std::ostream_iterator< char >( std::cout, "" ) );

  fin.close();
  return 0;
}

EDIT

This версия сохраняет пробелы.


C не обеспечивает хороший способ сделать это без создания переменной. Самый простой будет что-то вроде:

#include <stdio.h>

 int main( int argc, char **argv )
 {
   FILE *in = fopen( argv[1] );
   int ch;
   while ( ( ch = fgetc( in ) ) != EOF )
     putchar( ch );
   fclose( in );
   return 0;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...