使用Delphi将大文件转换为base64
我需要将文件从480mb转换为base64,但我不能。我总是记不住这封信。有人有什么建议吗使用Delphi将大文件转换为base64,delphi,base64,string-conversion,Delphi,Base64,String Conversion,我需要将文件从480mb转换为base64,但我不能。我总是记不住这封信。有人有什么建议吗 function TFormService.LoadFileToBase64(const AFileName: string): String; var // stream: TMemoryStream; Encoder: TIdEncoderMIME; Base64String: String; LStream: TMemoryStream; begin Encoder := TIdE
function TFormService.LoadFileToBase64(const AFileName: string): String;
var
// stream: TMemoryStream;
Encoder: TIdEncoderMIME;
Base64String: String;
LStream: TMemoryStream;
begin
Encoder := TIdEncoderMIME.Create;
LStream := TMemoryStream.Create;
try
LStream.LoadFromFile(AFileName);
Base64String := Encoder.Encode(LStream);
finally
FreeAndNil(Encoder);
FreeAndNil(LStream);
end; // try finally
// stream := TMemoryStream.Create;
// try
// stream.LoadFromFile(AFilename);
// result := EncodeBase64(stream.Memory, stream.Size);
// finally
// stream.Free;
// end;
end;
您不应该在内存中保存整个Base64字符串。480MB编码到Base64将产生约640M个字符,占用约1.28GB内存。这在32位应用程序中肯定会失败 最好将编码的字符串写入文件,并为此使用适当的编码器。最近的Delphi版本具有System.NetEncoding:
procedure ConvertFileToBase64(const AInFileName, AOutFileName: string);
var
inStream: TStream;
outStream: TStream;
begin
inStream := TFileStream.Create(AInFileName, fmOpenRead);
try
outStream := TFileStream.Create(AOutFileName, fmCreate);
try
TNetEncoding.Base64.Encode(inStream, outStream);
finally
outStream.Free;
end;
finally
inStream.Free;
end;
end;
使用TFilestream而不是TMemorystream…ty,但未解决。[link][/link]尝试1流。位置:=0;LoadFromFile.com之后出现同样的问题。从…里面memory@William在D2007及更早版本中,生成的base64字符串为573MB,在D2009及更高版本中为1GB。字符串的最大长度限制为MaxInt(~20亿)个字符或可用内存,以较小者为准。但也要记住,数据首先被编码到一个中间字节数组中,因此在准备最后的字符串时还有573MB在使用。输出文本是否使用ASCII字符,而不是UTF-16编码?@ArnaudBouchez,纯ASCII。编码只对字节有效,因此这里不涉及字符串。