如何解决如何阻止 fstream 使用字符转义?
我正在编辑一个文件,并附加到它。我在某处有一个 "
试图保留转义字符。由于此代码编写其他代码,然后编译。
#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');
}
}
\\\\\\\\\\"
如果有人想避免逃避角色,这可能是我能想到的方法之一,但是……这很丑陋。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。