起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 333|回复: 10

【结贴】如何在平台下使用FILEWRITE和FILEREAD**

[复制链接]
发表于 2007-9-30 15:34:33 | 显示全部楼层 |阅读模式
要创建并读写一个txt文件,filewrite和fileread函数在平台下该如果使用?
回复

使用道具 举报

发表于 2007-9-30 15:47:58 | 显示全部楼层
从Studio Help查出来的:

TFileStream = class(THandleStream)
public
  constructor create(AHandle: Longint); overload;
  constructor create(FileName: string; Mode: Word); overload;
  constructor create(FileName: string; Mode: Word; Rights: Longword); overload;
  procedure Destroy; override;
end;



THandleStream = class(TStream)
protected
  procedure SetSize(NewSize: Longint); override; overload;
  procedure SetSize(NewSize: Int64); override; overload;
public
  constructor create(AHandle: Longint);
  function Read(Buffer: TObject; Count: Longint): Longint; override;
  function Seek(Offset: Int64; Origin: TSeekOrigin): Int64; override; overload;
  function Write(Buffer: TObject; Count: Longint): Longint; override;
  property Handle: Longint; readonly;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-30 15:56:54 | 显示全部楼层
我用filewrite函数的时候那个第二个参数的类型是OBJECT,具体要这么用呢?delphi下面可以用,但是delphi下面第二个参数是用的是那个字符的第一个字符的指针,平台不支持,那么filewrite和fileread在平台下要这么用呢?很急啊,要过节,今天就要出来~~~谢谢了
回复 支持 反对

使用道具 举报

发表于 2007-9-30 16:09:41 | 显示全部楼层
平台第二个参数你直接传递字符串就好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-30 16:32:55 | 显示全部楼层
直接用字符串就报错

[错误]Biz:\NDGL\DFGLZXT\SFGL\TSFS.FUNC.DIR\TSFSCK.Form.pas(112, 37): Incompatible types: "Object&" and "String"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-30 16:36:55 | 显示全部楼层
procedure TTSFSCK.Button2Click(Sender: TObject);
var
   ls_temp :  string;
   li_str  : integer;
   filehandle :integer;
begin
   datasetbroker1.dataset.first;
   ls_temp := '';
   filehandle := sysutils.FileCreate('c:\1.txt');

   while not datasetbroker1.dataset.Eof do
   begin
      ls_temp := datasetbroker1.DataSet.FieldByName('bz').asstring;
      ls_temp := ls_temp + char(9);
      ls_temp := ls_temp + datasetbroker1.DataSet.FieldByName('code').asstring;
      ls_temp := ls_temp + char(9);
      ls_temp := ls_temp + datasetbroker1.DataSet.FieldByName('description').asstring;
      ls_temp := ls_temp + char(13) + char(10);

      li_str := sysutils.StrLen(ls_temp);

      sysutils.FileWrite(filehandle,ls_temp,li_str);
      datasetbroker1.dataset.next;

   end;
   sysutils.FileClose(filehandle);
end;


代码也传上来看看吧
回复 支持 反对

使用道具 举报

发表于 2007-9-30 16:49:31 | 显示全部楼层
sorry,4楼错误。string是继承自object,属于.net对象。这里要的是Tobject,是Delphi对象。

楼主看一下,可以用TStrings。或者用TStrings对象直接读和写文件。这样更容易处理一些。
var s:TStrings;
begin
  s:=TStringList.Create;
try
  s.Add('sss');
  s.savetofile('a.txt');
finally
  s.free;
end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-30 16:54:04 | 显示全部楼层
这个我也考虑过,不过数据可能会很多,可能有成千上万条,stringlist的长度不知道够不够啊。
回复 支持 反对

使用道具 举报

发表于 2007-9-30 20:25:20 | 显示全部楼层
只要楼主内存够就没问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-4 16:41:15 | 显示全部楼层
主要是因为上次客户运行过程中报过一次错,提示什么什么长度不够(具体的没有记下来),虽然只出过一次,但是我想应该是这个东西的问题,为了避免出错,我想换个办法解决这个问题。如果只是跟内存有关,那就无所谓了,数据再多,也不可能达到几十,几百兆吧。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-28 12:25 , Processed in 0.039929 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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