c++ - 尝试学习 C++ 中的基本文件操作

标签 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;
}

最佳答案

默认情况下,如果您不指定标志,openmode 将是write。如果文件已经存在,这将销毁文件的内容。

#include <iostream>
#include <fstream>

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

糟糕!

你显然应该把它移到循环之外。顺便说一下,您不需要显式调用 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;
        }
    }
}

关于c++ - 尝试学习 C++ 中的基本文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28759964/

相关文章:

c++ - std::abs 的模板版本

c++ - 如何使用 Boost Filesystem Library v3 确定文件是否包含在路径中?

c++ - 使用 memset 将派生结构归零

c++ - 关于运算符重载的例子

c++ - std::getline 只读取一行:

c++ - 如何将 std::condition_variable 与我自己的互斥体包装器一起使用

c++ - 关于 boost::interprocess::managed_shared_memory->size 的谜题

c++ - 如何在此指针上应用限制限定符

c++ - fatal error : openssl/ssl. h:没有这样的文件或目录

c++ - 尝试关闭时游标状态无效