如何从磁盘读取
.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()
不存在。
尝试使用以下辅助方法:
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;