如何使用资源文件(txt – 制表符分隔)作为win32应用程序的数据源

我正在一个win32应用程序。 我目前正在使用具有制表符分隔的数据作为源的文本文件。 我想embedded这个作为一个资源,所以我不用担心运输这个文件与.exe文件一起。

谁能告诉我怎么做?

Windows二进制文件可以嵌入资源。 大多数资源是预定义的类型(例如菜单,图标或位图),但是也可以嵌入任意二进制数据(例如文本文件)。 从阅读msdn文档,正确的语法很难弄清楚。

这段代码展示了如何从文件中嵌入二进制资源。

首先,您需要在C编译器和资源编译器将使用的头文件(例如resource.h)中定义一个资源标识符:

 #define MY_RESOURCE 300

然后你需要添加到你的资源文件(如resource.rc):

 MY_RESOURCE RCDATA“file-with-data.txt”

最后,这是如何获得这些数据:

 void WorkOnResource(void)
 {
     HGLOBAL res_handle = NULL;
     HRSRC资源;
     char * res_data;
     DWORD res_size;

     //注意:提供g_hInstance很重要,NULL可能不起作用
     res = FindResource(g_hInstance,MAKEINTRESOURCE(MY_RESOURCE),RT_RCDATA);
    如果(!res)
        返回;
     res_handle = LoadResource(NULL,res);
    如果(!res_handle)
        返回;
     res_data =(char *)LockResource(res_handle);
     res_size = SizeofResource(NULL,res);
     / *您现在可以使用资源数据* /
 }

定义资源ID,将其添加到.rc文件中:

ID_CUSTOM1 ANYTHINGGOESHERE "filename.txt" 

在运行时用这样的代码读取它:

  HRSRC hRes = FindResource(hInst, MAKEINTRESOURCE(ID_CUSTOM1), L"ANYTHINGGOESHERE"); HGLOBAL hMem = LoadResource(hInst, hRes); DWORD size = SizeofResource(hInst, hRes); char* resText = (char*)LockResource(hMem); char* text = (char*)malloc(size + 1); memcpy(text, resText, size); text[size] = 0; FreeResource(hMem); // use text... 

为什么不使用头文件,并把所有的数据放在一个静态数组中。 这样,您不必解析文本文件或担心部署

如果你正在寻找“正确”的方法来做到这一点,那么我会建议添加你的文本文件作为资源(作为一个字符串表或二进制),并使用LoadString或FindResource来访问它。

在Visual Studio中,您可以像其他任何资源一样将文本添加为​​资源。

在你的项目的resource.rc文件中:

 IDR_MYRESOURCE MYCUSTOMRESOURCETYPE "path_to_file.txt" 

在resource.h文件中:

 #define IDR_MYRESOURCE 104 

(或者您可以通过选择“添加资源”,然后选择“新建”,通过资源编辑器添加这些资源)

要在代码中加载资源:

 HRSRC hRes = FindResource( 0, "#104", "MYCUSTOMRESOURCETYPE" ); HGLOBAL hData = LoadResource( 0, hRes ); LPVOID data = LockResource( hData ); 

现在数据指向文本,并可以被转换为字符串。

编辑嗯看起来像大家同时发布相同的答案; P