代码之家  ›  专栏  ›  技术社区  ›  Mawg says reinstate Monica

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

  •  11
  • Mawg says reinstate Monica  · 技术社区  · 14 年前

    我只想分发一个.exe,但在运行时,我希望它提取一些嵌入的图像资源到用户的硬盘驱动器。

    我可以吗?如果可以,怎么做?

    4 回复  |  直到 12 年前
        1
  •  19
  •   Ken White    14 年前

    使用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而不是字符串名称。

        2
  •  4
  •   Rob Kennedy    14 年前

    创建 TResourceStream SysInit.HInstance 对于当前的EXE文件,或者从 LoadLibrary LoadPackage ),资源类型(例如 rt_Bitmap rt_RCData ),以及资源名称或数字ID。然后调用流的 SaveToFile 方法。

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

    然后将位图保存到磁盘。

        4
  •  1
  •   stOrM    14 年前

    如果您需要使用资源本身,这可能也很有用。 Delphidabbler / ResourceFiles