我使用Binary到你回答的Base64函数: 二进制到Base64(Delphi)
我成功地将文件编码为base64字符串并将其写入MsSQL2008数据库,但我想问一个问题:如何使用EncdDecd.pas再次将此文件写入磁盘?
Uwe*_*abe 16
一如既往,大卫回答得很充分.虽然我无法抗拒使用最近的Delphi版本的一些好东西给出一个稍微不同的解决方案.
procedure DecodeFile(const base64: AnsiString; const FileName: string);
var
stream: TBytesStream;
begin
stream := TBytesStream.Create(DecodeBase64(base64));
try
stream.SaveToFile(Filename);
finally
stream.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
此函数将采用base64编码的字符串,对其进行解码,并将生成的字节数组写入文件.
procedure DecodeToFile(const base64: AnsiString; const FileName: string);
var
stream: TFileStream;
bytes: TBytes;
begin
bytes := DecodeBase64(base64);
stream := TFileStream.Create(FileName, fmCreate);
try
if bytes<>nil then
stream.Write(bytes[0], Length(Bytes));
finally
stream.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
要解释这里发生的事情,第一行
bytes := DecodeBase64(base64);
Run Code Online (Sandbox Code Playgroud)
执行解码并在TBytes变量中返回文件的解码二进制内容.TBytes只是一个字节数组.
下一步是创建文件.在Delphi中编写文件的惯用方法是使用流.在这种情况下,我们想要一个TFileStream.
stream := TFileStream.Create(FileName, fmCreate);
Run Code Online (Sandbox Code Playgroud)
该fmCreate选项意味着如果文件已经存在,它将被我们编写的内容替换和覆盖.
最后一步是将字节数组的内容写入文件
if bytes<>nil then
stream.Write(bytes[0], Length(Bytes));
Run Code Online (Sandbox Code Playgroud)
该if bytes<>nil检查是处理其中的base64串解码为空数组的情况.如果我们要删除该检查,那么如果您在启用范围检查(您应该这样做)的情况下运行,则以下行将导致运行时错误.呼吁stream.Write应该是不言自明的.
| 归档时间: |
|
| 查看次数: |
18236 次 |
| 最近记录: |