我正在使用win32應用程序。我目前使用具有製表符分隔數據作爲源的文本文件。我想嵌入這個作爲資源,所以我不必擔心與.exe文件一起運輸此文件。如何使用資源文件(txt - 製表符分隔)作爲win32應用程序的數據源
任何人都可以告訴我該怎麼做嗎?
我正在使用win32應用程序。我目前使用具有製表符分隔數據作爲源的文本文件。我想嵌入這個作爲資源,所以我不必擔心與.exe文件一起運輸此文件。如何使用資源文件(txt - 製表符分隔)作爲win32應用程序的數據源
任何人都可以告訴我該怎麼做嗎?
爲什麼不使用頭文件並將所有數據都放入靜態數組中。這樣,你不必解析文本文件或擔心部署
你是對的。但更新呢?這樣做很難。如果我想添加新的資源...其艱難的做到這一點 – coder 2010-01-03 13:47:15
如果您正在尋找「正確」的方式來做到這一點,那麼我會建議添加您的文本文件作爲資源(作爲一個字符串表或二進制)並使用LoadString或FindResource來訪問它。在運行時用這樣的代碼
ID_CUSTOM1 ANYTHINGGOESHERE "filename.txt"
讀吧:
定義資源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...
謝謝你的回答 – coder 2010-01-03 13:01:51
的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 */ }
謝謝你的回答 – coder 2010-01-03 13:03:06
@alemjerus什麼是g_hInstance在備註中提到? – utvecklare 2016-02-20 18:31:27
在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
謝謝你的答案 – coder 2010-01-03 13:02:33
謝謝大家發佈了類似的答案。我學到了它。所以在這裏添加一個共同評論。 代碼的每個答案都幫助我加載並將其作爲字符或字符串獲取。但我的文件一行一行地有數據。如果全部都在一行中,就不可能使用它。我想加載它到地圖數組。 – coder 2010-01-03 13:01:08
我想我明白了。我需要解析並查找\ t和\ r並正確讀取字符。 – coder 2010-01-03 13:45:32