Использование потоков ввода / вывода для чтения из одного файла и записи в другой - PullRequest
0 голосов
/ 14 февраля 2019

Я прохожу учебник, где упражнение влечет за собой копирование текста из одного файла и запись его в нижнем регистре, эквивалентного другому файлу.Кажется, я не могу найти способ сделать это, используя только потоки ввода / вывода (большинство решений, которые я нашел в Интернете, используют потоковые буферы).

Мой код такой

int main()
{
string f_name1, f_name2;
cout << "enter the file names" << '\n';

cin >> f_name1>>f_name2;
ofstream fs{ f_name1 };
ifstream fsi{f_name1};
ofstream fs2{f_name2};

fs << "LoRem ipSUM teXt TaXi";

char ch;

while (fsi.get(ch)) {


    fs2 << ch;
}

После запуска ничего не записывается во второй файл (f_name2).Это просто пустой файл.

Редактировать:

Это тоже не работает

int main()
{
string f_name1, f_name2;
cout << "enter the file names" << '\n';

cin >> f_name1>>f_name2;
ofstream fs{ f_name1 };
ifstream fsi{f_name1};
ofstream fs2{f_name2};

fs << "LoRem ipSUM teXt TaXi";

char ch;

while (fsi>>ch) {


    fs2 << ch;
}

}

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019
  1. Вы усложняете свою задачу без видимой выгоды.Нет необходимости в

    ofstream fs{ f_name1 };
    fs << "LoRem ipSUM teXt TaXi";
    
  2. Используйте текстовый редактор и создайте содержимое входного файла вне программы.

Вотобновленная версия вашего main fuction:

int main()
{
   string f_name1, f_name2;
   cout << "enter the file names" << '\n';

   cin >> f_name1 >> f_name2;

   ifstream fs1{f_name1};
   if ( !fs1 )
   {
      std::cerr << "Unable to open " << f_name1 << " to read from.\n";
      return EXIT_FAILURE;
   }

   ofstream fs2{f_name2};
   if ( !fs2 )
   {
      std::cerr << "Unable to open " << f_name2 << " to write to.\n";
      return EXIT_FAILURE;
   }

   // Using ostream::put() seems the right function to use
   // for writing when you are using istream::getc() for reading.
   char ch;
   while (fs1.get(ch))
   {
      fs2.put(std::tolower(ch));
   }
}
0 голосов
/ 14 февраля 2019

Хм.Итак, вы пишете в файл, затем читаете содержимое и снова пишете.Хорошо ...

Возможно, вам понадобится fs.flush () после кода fs <<.Данные можно буферизовать, ожидая, пока символ новой строки вызовет сброс, или сделайте их самостоятельно. </p>

Я бы также добавил несколько операторов print в ваш цикл while, чтобы убедиться, что вы получаете то, что думаете.вы получаете.

...