我现在做一个Activex控件,其中函数SEH_GetFile用来获取文件流(包括纯文本文件,word文档,excel表格等二进制流)
function TDigitalSafe.SEH_GetFile(const filename: WideString): WideString;
begin
result:=WideString(GetAnyFile(filename));
end; 其中GetAnyFile函数是自定义的函数
function GetAnyFile(const AFileName: String): String;
var
fs: TFileStream;
begin
Result := '';
if not FileExists(AFileName) then Exit;
fs := TFileStream.Create(AFileName, fmOpenRead);
try
SetLength(Result, fs.Size);
fs.Read(Pointer(Result)^, fs.Size);
finally
fs.Free;
end;
end; 然后在网页jsp程序中将取出的文件流进行pem编码(同delphi里encodebase64),使之成为可网络传输的流送到服务器端,服务器再pem解码,回复为二进制流,再恢复文件。对于纯文本文件,恢复的文件内容是和原有文件一致的,可是对于word等特殊格式的文档,内容就变成类似
邢 唷? > ? ! # ?? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????欹 9 餜
bjbj
....
的样子了,我怀疑是widestring的问题,Activex控件的函数返回类型可以是string的吗?谢谢
function TDigitalSafe.SEH_GetFile(const filename: WideString): WideString;
begin
result:=WideString(GetAnyFile(filename));
end; 其中GetAnyFile函数是自定义的函数
function GetAnyFile(const AFileName: String): String;
var
fs: TFileStream;
begin
Result := '';
if not FileExists(AFileName) then Exit;
fs := TFileStream.Create(AFileName, fmOpenRead);
try
SetLength(Result, fs.Size);
fs.Read(Pointer(Result)^, fs.Size);
finally
fs.Free;
end;
end; 然后在网页jsp程序中将取出的文件流进行pem编码(同delphi里encodebase64),使之成为可网络传输的流送到服务器端,服务器再pem解码,回复为二进制流,再恢复文件。对于纯文本文件,恢复的文件内容是和原有文件一致的,可是对于word等特殊格式的文档,内容就变成类似
邢 唷? > ? ! # ?? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????欹 9 餜
bjbj
....
的样子了,我怀疑是widestring的问题,Activex控件的函数返回类型可以是string的吗?谢谢
解决方案 »
- dbgrid的数据如何导入到另一个dbgrid中。
- Delphi 中,我动态创建memo 组件,如何释放掉他呢
- 如何将TMemoryStream内容传给TImage,并且不用先保存到硬盘在读取?
- 如何消除图片的闪烁,原来是用image控件来设置图片的高度来实现的,有是闪烁,请教高手,请给出代码,好吗
- ReportBulider+Delphi5打印时不显示!急!!!
- 在delphi中如何产生-100~~~100的随机数
- 软件以近完成,,现在想在里面加一个注册期限?/?////
- 千古难题:怎么解决?
- 怎样获得鼠标指向的正在执行的任何程序的“控件”的句柄
- 有没有办法让dephi5编的程序再小一点?
- ctrl+左键为什么有时候不起作用?
- Delphi调用Access的一个小问题
你通过GetAnyFile得到的是正确的文件流,但你把那个结果String转换为WideString,这时候那个WideString不再能正确反映二进制文件流的正确内容,对于文本文件却是正确的,所以恢复的时候也只能恢复文本文件,而不能恢复二进制文件。