如何在运行时将资源提取到文件中?

12

我希望只发布一个单独的 .exe 文件,但在运行时,我想将一些嵌入的图像资源提取到用户的硬盘驱动器上。

我能做到吗?如果可以,怎么做呢?

4个回答

19

使用Delphi的TResourceStream。它的构造函数将会找到并加载资源到内存中,而它的SaveToFile方法则会进行磁盘写入。

类似以下代码应该可以工作:

var
  ResStream: TResourceStream;
begin
  ResStream := TResourceStream.Create(HInstance, 'YOURRESOURCENAME', RT_RCDATA);
  try
    ResStream.Position := 0;
    ResStream.SaveToFile('C:\YourDir\YourFileName.jpg');
  finally
    ResStream.Free;
  end;
end;

如果您可以使用资源ID而不是名称,则会减少一些内存。在这种情况下,您将使用CreateFromID替换Create,并提供数值ID而不是字符串名称。


3
无论操作系统告诉你什么值,@Leonix。 HInstance 是一个全局变量,Delphi 在程序启动时为您初始化它。 它在 SysInit 单元中。 - Rob Kennedy

4
创建一个TResourceStream。您需要模块实例句柄(通常为当前EXE文件的SysInit.HInstance,或者从LoadLibraryLoadPackage获取的任何内容),资源类型(如rt_Bitmaprt_RCData),以及资源名称或数字ID。然后调用流的SaveToFile方法即可。

2
try
   if not Assigned(Bitmap)
   then
      Bitmap := TBitmap.Create();
   Bitmap.LoadFromResourceName(HInstance,SRC);
except
   on E:Exception do
      ShowMessage(e.Message);
end;

然后将位图保存到磁盘。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接