使用I / O流从一个文件读取并写入另一个文件

时间:2019-02-14 04:27:43

标签: c++ file io

我正在阅读一本教科书,其中的练习需要从一个文件中复制文本,并将其写成小写形式,等效于另一文件。我似乎找不到仅使用I / O流来做到这一点的方法(我在网上找到的大多数解决方案都使用流缓冲区)。

我的代码是这个

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 :(得分:1)

  1. 您正在使任务复杂化,但没有明显的收获。不需要

    ofstream fs{ f_name1 };
    fs << "LoRem ipSUM teXt TaXi";
    
  2. 使用文本编辑器并在程序外部创建输入文件的内容。

以下是您的main功能的更新版本:

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));
   }
}

答案 1 :(得分:0)

嗯。因此,您正在写入文件,然后读取内容并再次写出。好吧...

您可能需要在fs <<代码之后执行fs.flush()。可以对数据进行缓冲,等待换行符触发刷新,或者自己进行操作。

我还将在while循环中放入一些打印语句,以确保您得到的是您想得到的。