更快的导出嵌入数据的方法

时间:2010-02-14 20:46:12

标签: c++ winapi embedded-resource copying

出于某些原因,我正在使用此处描述的方法:http://geekswithblogs.net/TechTwaddle/archive/2009/10/16/how-to-embed-an-exe-inside-another-exe-as-a.aspx

它从嵌入文件的第一个字节开始,逐个经过4.234.925个字节!完成大约需要40秒。

还有其他方法可以将嵌入文件复制到硬盘吗? (我可能在这里错了,但我认为嵌入式文件是从内存中读取的)

感谢。

2 个答案:

答案 0 :(得分:2)

一旦知道嵌入式exe的位置和大小,就可以一次写入。

LPBYTE pbExtract; // the pointer to the data to extract
UINT   cbExtract; // the size of the data to extract.

HANDLE hf;
hf = CreateFile("filename.exe",          // file name
                GENERIC_WRITE,           // open for writing 
                0,                       // no share
                NULL,                    // no security 
                CREATE_ALWAYS,           // overwrite existing
                FILE_ATTRIBUTE_NORMAL,   // normal file 
                NULL);                   // no template 

if (INVALID_HANDLE_VALUE != hf)
{
   DWORD cbWrote;
   WriteFile(hf, pbExtract, cbExtract, &cbWrote, NULL);
   CloseHandle(hf);
}

答案 1 :(得分:1)

正如该男子所说,每个WriteFile调用写下更多文件(或整个文件)。每个字节的WriteFile调用将是非常慢的是。