如何阻止 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
\\\\\"
如果有人想避免转义字符,这可能是我能想到的方法之一,但是......它很难看。
我正在编辑一个文件,并附加到它。我在某个地方有一个 "
我试图为其保留转义字符。由于这段代码编写了其他代码,然后被编译。
#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
\\\\\"
如果有人想避免转义字符,这可能是我能想到的方法之一,但是......它很难看。