2010-02-18 96 views
0

我想在程序中嵌入文件。如果沒有提供,它將用於默認配置文件。我意識到我可以使用默認值,但我想提取文件並將其放在磁盤上以便修改。將文件嵌入到程序中

+0

發現你有一個副本:http://stackoverflow.com/questions/1074362/embedded-resource-in-c由於在C++的其他上下文中使用「資源」和「管理」但我相信我已經看到了Linux和Mac的問題以及... – dmckee 2010-02-18 03:46:27

+0

linux dup:http://stackoverflow.com/questions/72616/embed-data-in-ac-program(早期序列號,太) – dmckee 2010-02-18 03:51:10

+0

除非你想完全自己做,這是特定的庫和/或操作系統 - 添加你想要做的環境。 – 2010-02-18 03:53:51

回答

-2

如果是任何Unix查看映射文件到與mmap(2)進程內存。 Windows有類似的東西,但我從來沒有玩過它。

+2

我不認爲你已經在這裏回答正確的問題... – dmckee 2010-02-18 03:43:14

+0

我回答了左邊的:) – 2010-02-19 02:07:35

3

通過嵌入你的意思是分發你的程序沒有文件?

然後,您可以將它轉換爲構建工具鏈中的配置初始化代碼。添加makefile步驟(或者您正在使用的任何工具) - 將該.cfg文件轉換爲一些初始化配置數據結構的C++代碼文件的腳本。這樣,您可以修改.cfg文件,重建項目,並將新值反映到裏面。

順便說一句,在Windows上,您可能有幸將數據嵌入到resource file中。

+0

那麼我真的想做的是有一個我的程序能夠從引擎內生成一個有效的文件,例如.png文件。我希望能夠將這些文件生成到磁盤上,有點像zip文件。 – Jeff 2010-02-18 03:45:26

2

嵌入式數據通常被稱爲「資源」。 C++不提供本地支持,但可以用幾乎所有可執行文件格式進行管理。嘗試搜索C++的資源管理器。

2

,你可以做一個共同點是表示該文件數據的靜態字節數組:

// In a header file: 
extern const char file_data[]; 
extern const size_t file_data_size; 

// In a source file: 
const char file_data[] = {0x41, 0x42, ... }; // etc. 
const size_t file_data_size = sizeof(file_data); 

然後將文件數據將只被編譯成可執行的字節,你可以參考的一個全局數組任何地方。您必須重寫您的文件處理代碼才能處理原始字節數組,或者使用類似fmemopen(3)之類的方法從數據打開僞文件句柄,並將其傳遞到您的文件處理代碼。

當然,要將數據轉換爲這種形式,您需要使用某種預處理步驟將文件轉換爲編譯器可以接受的字節數組。 makefile對此很有用。

+0

有些程序會將數據文件轉換爲一對C文件(標題和正文)給你。可能還有一些程序可以將數據直接打包到鏈接器對象文件中,但顯然這是一種不太輕便的黑客技術。 – Steve314 2010-02-18 06:37:20

+0

儘管此解決方案適用於小文件,但我在Visual Studio中經歷了巨大的編譯時間(使用4kb文件)。如果您打開包含數組的文件,Visual Studio也會開始滯後。 – Tara 2013-06-27 06:42:03