如何阻止 fstream 消耗字符转义?

How to stop fstream from consuming character escapes?

我正在编辑一个文件,并附加到它。我在某个地方有一个 " 我试图为其保留转义字符。由于这段代码编写了其他代码,然后被编译。

#define EDIT_FILE fstream::out | fstream::binary | fstream::in | fstream::ate
#define REWRITE_FILE fstream::out | fstream::binary | fstream::in | fstream::trunc

fstream *fileStream  = new fstream("path/to/file", REWRITE_FILE);
//  add some text to file. Then open again for edits.
fileStream->close();
fileStream->open("path/to/file", EDIT_FILE);
*filestream << "\\\"";

我试过更改斜杠的数量,但没有成功。我尝试删除 fstream::out,建议的其他答案应该有效,这只是导致程序在尝试写入文件时崩溃。我应该使用哪种标志组合来附加到文件末尾,同时保留转义字符?

您是否需要 raw string literals 之类的东西?

#include <fstream>

int main() {
    std::fstream file("test.txt", std::ios::out);
    if(file) {
        file<<R"f(\\\")f";
    }
}

然后yields

\\\"

可以使用语法 R"delimiter(raw_characters)delimiter" 创建原始字符串文字。在上面的例子中,f 用作分隔符。它们专门用于避免转义字符。需要注意的一点是分隔符不应出现在原始字符中。

编辑:

根据要求,采用二进制路由的一种方法是直接写入字符的 ASCII 值,无需转义它们,如下所示(无错误检查!):

#include <fstream>
#include <vector>

namespace {
    char BACK_SLASH = 92; //ASCII for '\'
    char QUOTE = 34; //ASCII for '"'
}

int main() {
    std::fstream file("test.bin", std::ios::binary|std::ios::out);
    if(file) {
        std::vector<char> str(10, BACK_SLASH);
        str.push_back(QUOTE);
        file.write(str.data(), str.size());
        file.put('\n');
    }
}

哪个yields

\\\\\"

如果有人想避免转义字符,这可能是我能想到的方法之一,但是......它很难看。