std :: copy正在复制一个额外的回车符

时间:2016-03-26 01:04:49

标签: c++

我正在复制文件的内容,然后在同一个文件上创建一个std :: ofstream,然后使用带有std :: ostream_iterator的std :: copy到该std :: ofstream来复制复制的文件内容回到文件中。

我的问题是在每个原始行之间插入一个新的空行。

这是我的代码:

std::string firstFile = getFileContents_asString("filepath.txt");
std::ofstream fileOutStream("filepath.txt");
std::ostream_iterator<char> oi(fileOutStream);
std::copy(firstFile.begin(), firstFile.end(), oi);

需要这样的文字:

#include "worklogger_pres_model.h"
#include "worklogmodel_container.h"
#include <QSqlRelationalTableModel>

这样做:

#include "worklogger_pres_model.h"

#include "worklogmodel_container.h"

#include <QSqlRelationalTableModel>

在使用调试器签出内容时,在第一次调试运行时,firstFile字符串的长度类似于model.h\r\n#includ

第二次调试运行时,firstFile字符串的延伸部分为model.h\r\r\n#includ

为什么std :: copy会将每个回车符复制一个额外的\ r或回车符回到文件中?

如果结果有帮助,这里是getFileContents_asString方法。

std::string getFileContents_asString(const char * filename) {
    std::ifstream f (filename, std::ios::in | std::ios::binary);
    if (f) {
        std::string buffer;
        f.seekg(0, std::ios::end);
        buffer.resize(f.tellg());
        f.seekg(0, std::ios::beg);
        f.read(&buffer[0], buffer.size());
        f.close();
        return buffer;
    } else {
        std::cout << "file could not be opened";
        return std::string("failure to open file");
    }
}

1 个答案:

答案 0 :(得分:4)

改变这个:

std::ofstream fileOutStream("filepath.txt");

到此:

std::ofstream fileOutStream("filepath.txt", std::ios::in | std::ios::binary);

您以二进制文件打开输入文件,因此对输出文件执行相同操作也是有意义的。

正如M.M所说:

另一种选择是将两个文件作为文本打开(在这种情况下,内存缓冲区将包含\n而不是\r\n)。