试图学习c ++中的基本文件操作

hac*_*aut 2 c++

我正试图搞定处理文件C++.我正在尝试从一个文件中读取并使用相同的内容创建另一个文件.我已经成功了,我可以将文件的第一行复制而不是其余部分.谁能告诉我我做错了什么?

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char * argv[]){

    string line;
    ofstream writeFile;
    ifstream readFile;
    readFile.open("students.txt");
    if (readFile.is_open()){
        while (getline (readFile, line)){
            writeFile.open("copytext.txt");
            writeFile << line;
            writeFile << line;
            writeFile << line;
            writeFile << line;
        }
    }
    readFile.close();
    writeFile.close();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

小智 6

默认情况下,如果您没有指定标志,那么openmode将是write.这将破坏文件的内容(如果已存在).

#include <iostream>
#include <fstream>

int main()
{
    std::ofstream of("test.txt"); // close() implicitly called by destructor
}
Run Code Online (Sandbox Code Playgroud)
> echo "hello" > test.txt
> cat test.txt
hello
> g++ test.cpp
> ./a.out
> cat test.txt
Run Code Online (Sandbox Code Playgroud)

哎呀!

显然你应该把它移到循环之外.顺便说一句,您不需要调用openclose显式,因为构造函数和析构函数将分别调用它们.流对象也可以隐式转换为bool(如果流中存在错误则返回false),从而产生is_open冗余.

int main(int argc, char * argv[]){
    string line;
    ifstream readFile("students.txt");
    ofstream writeFile("copytext.txt");

    if (readFile && writeFile){
        while (getline (readFile, line)) {
            writeFile << line;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)