从 DISk Delphi 读取资源文件

问题描述 投票:0回答:1

如何从磁盘读取.res文件?不附加到.exe,所以可以轻松更新.res文件而不需要再次.exe吗?

类似的东西

function LoadResourceFromDisk(const FileName, ResName: string): TStream;
var
  ResourceStream: TResourceStream;
  FileStream: TFileStream;
begin
  Result := nil;
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    ResourceStream := TResourceStream.CreateFromStream(FileStream, ResName);
    try
      Result := ResourceStream;
    finally
      ResourceStream.Free;
    end;
  finally
    FileStream.Free;
  end;
end;

但是 CreateFromStream 函数不存在。

delphi
1个回答
0
投票

尝试使用以下辅助方法:

function LoadResourceFromDisk(const FileName, ResName: string): TMemoryStream;
var
  FileStream: TFileStream;
  ResHeader: TResHeader;
  ResData: TBytes;
begin
  Result := TMemoryStream.Create;
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    while FileStream.Position < FileStream.Size do
    begin
      // Read resource header
      FileStream.ReadBuffer(ResHeader, SizeOf(ResHeader));
      // Check if this is the resource we're looking for
      if ResHeader.ResName = ResName then
      begin
        // Read resource data
        SetLength(ResData, ResHeader.DataSize);
        FileStream.ReadBuffer(ResData[0], ResHeader.DataSize);
        // Write to result stream
        Result.WriteBuffer(ResData[0], ResHeader.DataSize);
        Break;
      end
      else
        // Skip to next resource
        FileStream.Position := FileStream.Position + ResHeader.DataSize;
    end;
  finally
    FileStream.Free;
  end;
end;
© www.soinside.com 2019 - 2024. All rights reserved.