使用文件内容作为硬编码字符串

Use file content as hardcoded string

本文关键字:编码 编码字符 字符串 文件      更新时间:2023-10-16

我正在寻找一种将文件内容用作硬编码字符串常量的简单方法。

当然,我可以将文件内容复制/粘贴到define中,但这需要我将放在每行的末尾和每个"的前面。

我试图使用constexpr使预编译器加载文件,但要么我做错了什么(我不熟悉constexpr(,要么不可能那样做。

这是我尝试过的:

constexpr const char* loadFile()
{
std::string retVar;
std::ifstream file("filename.txt");
retVar = std::string((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
return retVar.c_str();
}
#define FILE_CONTENT = loadFile();

我收到错误:

error: body of constexpr function 'constexpr const char* loadFile()' not a return-statement

也许有人可以修改我的代码以按预期工作,或者有人有一种全新的方法来实现我的目标。

我知道我可以简单地编写一个脚本来读取文件的内容并将其转换为#define但我想在没有额外的预构建步骤的情况下做到这一点。

编辑:如何将文件嵌入可执行文件? 重点介绍嵌入二进制文件。我只想将文本文件的内容用作硬编码字符串。 建议的方法对于我想做的事情来说太重了。

最简单的方法是将内容复制粘贴到头文件/实现文件中,但作为原始字符串文字,即

constexpr const char *fileContent = R"~(FILE_CONTENT_GOES_HERE)~";
//               begin raw literal: ^^^^                      ^^^ end raw literal

您应该将FILE_CONTENT_GOES_HERE替换为文件的未修改内容。请注意,分隔符(此处:~(可以选择不同的方式,有关详细信息,请参阅此处。

原始字符串文字是 C++11 的一项功能,可让您免于转义任何内容(引号、换行符等(。请注意,对于 C++17,您可能希望有选择地将字符串文本绑定到std::string_view实例和/或将变量声明为inline