起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 232|回复: 4

【搞定】关于流的使用的问题,delphi 中好用 ,平台中该如何实现?**

[复制链接]
发表于 2007-1-30 14:46:51 | 显示全部楼层 |阅读模式
在delphi中的一个函数,如下所示,怎么转换成平台中可用的?
function TImportExportForm.SaveAsMyFile(FileName: String): Boolean;
var
  AFileStream: TFileStream;
  AStream: TStream;
  AStr: Array[0..49] of Char;
  ASize: Integer;
begin
  Result := False;
  try
    AFileStream := TFileStream.Create(FileName, fmCreate);
    AStream := TMemoryStream.Create;
    try
      //写文件头
      StrPCopy(AStr, 'hdsoft');  ///在平台中这个就不好处理,因为参数只能是string;
      AFileStream.WriteBuffer(AStr, 6);   ///在平台中不知道如何处理也是参数的问题,转换成tobject                  也不行
      //生成数据文件
      TmpData.SaveToStream(AStream); ///tmpdata 是一个clientdataset
      //写文件长度
      ASize := AStream.Size; /// 数据文件的长度,以便在读文件的时候获取文件长度
      AStream.Position := 0;
      AFileStream.WriteBuffer(ASize, SizeOf(ASize));  //平台中不好处理,也是参数的问题
      //写入文件内容
      AFileStream.CopyFrom(AStream, ASize);
      Result := True;
    except
    end;
  finally
    AStream.Free;
    AFileStream.Free;
  end;
end;
回复

使用道具 举报

 楼主| 发表于 2007-1-30 16:16:29 | 显示全部楼层
方法可能有点笨,但是可以正常导出文件,由于目前还没做出导入,所以还没法验证是否正确,欢迎大家写出更精彩的方法来,也希望多提建议。
function TSJDRDC.SaveAsMyFile(FileName: String): Boolean;
var
  AFileStream: TFileStream;
  AStream: TStream;
  pStream:TStream;
  ppStream:TStream;
  AStr: Tstrings;
  ASize: Tstrings;
  Acount:integer;
begin
  Result := False;
  try
    AFileStream := TFileStream.Create(FileName,classes.fmCreate);
    AStream := TMemoryStream.Create;
    pStream := TMemoryStream.Create;
    ppStream := TMemoryStream.Create;
    try
    Astr:=Tstringlist.Create;
    Asize:=Tstringlist.Create;
      //写文件头
      Astr.Add('hdsoft');
      Astr.SaveToStream(pStream);
      Pstream.Position:=0;
      Afilestream.CopyFrom(pStream,6);
      //生成数据文件
      Datasettemp.SaveToStream(AStream,TDataPacketFormat.dfBinary);
      //写文件长度
      Acount:= AStream.Size;
      asize.Add(sysutils.IntToStr(Acount));
      Asize.SaveToStream(ppStream);
      ppStream.Position := 0;
      AStream.Position:= 0;
      //ppStream 中保存文件流的长度
      AFileStream.CopyFrom(ppStream,ppstream.Size);
      //写入文件内容
      AFileStream.CopyFrom(AStream, Acount);
      Result := True;
    except
    end;
  finally
    AStream.Free;
    pStream.Free;
    ppStream.Free;
    AFileStream.Free;
    Asize.Free;
    AStr.Free;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-30 20:15:06 | 显示全部楼层
人呢?没有能解决的么??????版主!!!!!
回复 支持 反对

使用道具 举报

发表于 2007-2-1 20:03:12 | 显示全部楼层
这里的流代码用到了指针,在平台上不支持指针,所以1楼的代码在Delphi中可以,在平台上不行
这样的情况,可以在外面做一个函数,当作外部控件导入到平台上使用
回复 支持 反对

使用道具 举报

发表于 2007-9-14 14:59:28 | 显示全部楼层
由于楼主长时间未跟贴,此帖先结,有问题请开新帖.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-16 06:34 , Processed in 0.039067 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表