如何使用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.