c++ - 如何阻止 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
,建议的其他答案应该可以工作,而这只是导致程序在尝试写入文件时崩溃。我应该使用哪种标志组合附加到文件末尾,同时保留转义字符?
解决方案
你需要像原始字符串文字这样的东西吗?
#include <fstream>
int main() {
std::fstream file("test.txt", std::ios::out);
if(file) {
file<<R"f(\\\\\")f";
}
}
然后产生
\\\\\"
可以使用语法创建原始字符串文字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');
}
}
产生_
\\\\\\\\\\"
如果一个人想避免逃避角色,这可能是我能想到的方法之一,但好吧……这很丑陋。
推荐阅读
- wpf - WPF - 自动和按比例调整行大小的组合
- r - 在 R 中围绕特定目标日期的大型数据集中计算 30 天平均值
- c++ - 我不知道为什么我的 add 方法不起作用
- javascript - 表示已连接但未运行 onaddstream 函数的 iceConnectionState
- java - 一旦 Canvas 变得太大,如何捕获这个 JavaFX NullPointerException?
- java - 确定输入字符串是否为回文的有效方法
- r - 如何修复“Hist 仅适用于单个数字列”。R中的错误
- android - “不包含”和“和/或”运算符在 Kotlin 中无法正常工作
- spring-jdbc - Spring JdbcTemplate.update 不使用 KeyHolder 生成密钥
- php - 如何根据创建时间为目录中的文件名分配唯一 ID