一种在编译时从文件中读取数据并将其放入应用程序图像文件中的某处以初始化数组的方法

问题描述 投票:0回答:4

考虑到 Visual C++ 编译器,假设我有一个具有任何扩展名的文件,它包含 100 字节的数据,这正是我想要初始化长度为 100 个字符的 char 数据类型数组的数据,现在显然一种方法是在运行时使用 I/O 文件类或 API 从文件中读取这些数据,但我想知道的是,是否有任何方法使用指令或其他方式告诉编译器我想要放入该数据在编译时在我的应用程序图像文件中的正确位置,编译器应该从该文件中读取这些数据?

c++ file visual-c++ initialization
4个回答
4
投票
  • 编写一个程序,读取 100 字节数据文件并生成一个文件作为输出,其中使用 C++ 代码/语法来声明文件中包含 100 字节的数组。
  • 将这个新生成的文件(内联)包含在您的主 c++ 文件中。
  • 在主 c++ 文件上调用 c++ 编译器。

2
投票

您可以使用 Windows 程序中的资源来执行此操作。 右键单击项目,添加,资源,导入。 为自定义资源类型命名。 如有必要,编辑资源 ID。 使用 FindResource 和 LoadResource 在运行时获取指向资源数据的指针。


1
投票

我在测试文本数据时经常使用的是创建一个

std::istringstream
对象,其中包含要读取的文件的文本,如下所示:

#include <string>
#include <fstream>
#include <sstream>

// raw string literal for easy pasting in
// of textual file data
std::istringstream internal_config(R"~(

# Config file

host: wibble.org
port: 7334
// etc....

)~");

// std::istream& can receive either an ifstream or an istringstream
void read_config(std::istream& is)
{
    std::string line;
    while(std::getline(is, line))
    {
        // do stuff
    }
}

int main(int argc, char* argv[])
{
    // did the user pass a filename to use?
    std::string filename;
    if(argc > 2 && std::string(argv[1]) == "--config")
        filename = argv[2];

    // if so try to use the file
    std::ifstream ifs;
    if(!filename.empty())
        ifs.open(filename);

    if(ifs.is_open())
        read_config(ifs);
    else
        read_config(internal_config); // file failed use internal config
}

0
投票
#include "filename"

还是我遗漏了一些明显的东西?

© www.soinside.com 2019 - 2024. All rights reserved.