2010-01-03 39 views
2

我正在使用win32應用程序。我目前使用具有製表符分隔數據作爲源的文本文件。我想嵌入這個作爲資源,所以我不必擔心與.exe文件一起運輸此文件。如何使用資源文件(txt - 製表符分隔)作爲win32應用程序的數據源

任何人都可以告訴我該怎麼做嗎?

+0

謝謝大家發佈了類似的答案。我學到了它。所以在這裏添加一個共同評論。 代碼的每個答案都幫助我加載並將其作爲字符或字符串獲取。但我的文件一行一行地有數據。如果全部都在一行中,就不可能使用它。我想加載它到地圖數組。 – coder 2010-01-03 13:01:08

+0

我想我明白了。我需要解析並查找\ t和\ r並正確讀取字符。 – coder 2010-01-03 13:45:32

回答

1

爲什麼不使用頭文件並將所有數據都放入靜態數組中。這樣,你不必解析文本文件或擔心部署

+1

你是對的。但更新呢?這樣做很難。如果我想添加新的資源...其艱難的做到這一點 – coder 2010-01-03 13:47:15

1

如果您正在尋找「正確」的方式來做到這一點,那麼我會建議添加您的文本文件作爲資源(作爲一個字符串表或二進制)並使用LoadString或FindResource來訪問它。在運行時用這樣的代碼

ID_CUSTOM1 ANYTHINGGOESHERE "filename.txt" 

讀吧:

5

定義資源ID,將其添加到rc文件

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... 
+0

謝謝你的回答 – coder 2010-01-03 13:01:51

7

的Windows二進制文件可以在其中嵌入的資源。大多數資源是預定的類型(例如菜單,圖標或位圖),但你也可以嵌入任意的二進制數據(例如文本文件)。正確的語法很難從讀取msdn文檔中找出來。

這段代碼展示瞭如何從文件中嵌入二進制資源。

首先,你需要定義一個資源在頭文件(如resource.h中),將雙方的C編譯器和資源編譯器使用的標識符:

 
#define MY_RESOURCE 300 

然後,你需要添加到您的資源文件(如RESOURCE.RC):

 
MY_RESOURCE RCDATA "file-with-data.txt" 

最後,這是你可以得到這樣的數據:

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

    // NOTE: providing g_hInstance is important, NULL might not work 
    res = FindResource(g_hInstance, MAKEINTRESOURCE(MY_RESOURCE), RT_RCDATA); 
    if (!res) 
     return; 
    res_handle = LoadResource(NULL, res); 
    if (!res_handle) 
     return; 
    res_data = (char*)LockResource(res_handle); 
    res_size = SizeofResource(NULL, res); 
    /* you can now use the resource data */ 
} 
+0

謝謝你的回答 – coder 2010-01-03 13:03:06

+2

@alemjerus什麼是g_hInstance在備註中提到? – utvecklare 2016-02-20 18:31:27

1

在Visual Studio中,您可以像任何其他資源一樣將文本添加爲​​資源。

在項目的RESOURCE.RC文件:

#define IDR_MYRESOURCE 104 

(或者你可以通過選擇資源編輯器中添加這些「添加資源:

IDR_MYRESOURCE MYCUSTOMRESOURCETYPE "path_to_file.txt" 
在Resource.h文件

」,然後選擇 「新建」)

加載資源代碼:

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

現在數據指向文本,並且可以被轉換爲字符串。

編輯 嗯看起來就像每個人都張貼在同一時間相同的答案,P

+0

謝謝你的答案 – coder 2010-01-03 13:02:33

相關問題