关于dat文件写入的变量类型问题,急!万分感谢(100分)

  • 主题发起人 主题发起人 weserver
  • 开始时间 开始时间
W

weserver

Unregistered / Unconfirmed
GUEST, unregistred user!
with TFileStream.Create(ExtractFilePath(Application.ExeName)+'teluser.dat', fmCreate) do
try
Buf[1] := label1.Caption;
Buf[2] := 'abc' ;
Write(Buf, 20);
Messagedlg('文件写入成功,请确认!',mtinformation,[mbOK],0);
finally
Free;
end;

程序中dat文件写入后,为什么Buf[1]读取的是空的,而Buf[2]读取是有数据的…
 
Buf[1] := label1.Caption;
是指的工程界面上的一个label控件么?会不会你caption设的就是''...........
 
label1.Caption 是有内容的,不是空的…
 
buf是怎么定义的?
 
Buf: array [1..2] of string ;
 
Buf: array [1..2] of string ;
这样写入也可以吗?应该定义固定长度吧
比如Buf: array [1..2] of ShortString ;
或者Buf: array [1..2] of string[10] ;
 
我改了以后好象还是不可以哦…主要好象是写入有问题
 
for i:=1 to 2 do
Write(Buf, length(Buf));
 
TO:kaida
我试了你的方法,还是不可以…但还是非常感谢你的帮忙…
我查了相关资料,好象不可以直接写入string类型的,但具体怎么写,我还是不大明白,希望能得到大家的帮忙,谢谢
 
刚才我测试了,可以直接写入。下面是我根据你的代码做的测试。
我觉得最主要的一点就是写入和读出的时候,缓冲区的长度必须对应,写入的时候是多少,读出的时候也应该是多少。这个很关键。
procedure TForm1.Button1Click(Sender: TObject);
var buf:array[1..2] of string ;
begin
with TFileStream.Create('c:/1.txt', fmCreate) do
try
Buf[1] := label1.Caption;
Buf[2] := 'abc' ;
Write(Buf[1], 10);
Write(Buf[2], 10);
Messagedlg('文件写入成功,请确认!',mtinformation,[mbOK],0);
finally
Free;
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var buf:array[1..2] of string ;
begin
with TFileStream.Create('c:/1.txt', fmOpenRead ) do
try
Buf[1] := label1.Caption;
Buf[2] := 'abc' ;
read(Buf[1], 10);
read(Buf[2], 10);
Memo1.Lines.Add(buf[1]);
Memo1.Lines.Add(buf[2]);
Messagedlg('文件写入成功,请确认!',mtinformation,[mbOK],0);
finally
Free;
end;
end;
 
TO:zywcd
读取的时候为什么也要加以下两句
Buf[1] := label1.Caption;
Buf[2] := 'abc'
读取的时候这两句如果屏蔽就会错误…请大家帮忙…
 
这样可以啊,我刚才测试了。
procedure TForm1.Button1Click(Sender: TObject);
var buf:array[1..2] of string ;
begin
with TFileStream.Create('c:/1.txt', fmCreate) do
try
Buf[1] := label1.Caption;
Buf[2] := 'abc' ;
Write(Buf[1], 10);
Write(Buf[2], 10);
Messagedlg('文件写入成功,请确认!',mtinformation,[mbOK],0);
finally
Free;
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var buf:array[1..2] of string ;
begin
with TFileStream.Create('c:/1.txt', fmOpenRead ) do
try
read(Buf[1], 10);
read(Buf[2], 10);
Memo1.Lines.Add(buf[1]);
Memo1.Lines.Add(buf[2]);
finally
Free;
end;
end;
 
to:zywcd

刚才是我搞错了,不好意思,
不过好象把 Buf[1] := label1.Caption; 改成 Buf[1] := edit1.text 程序还是出错,
请再帮忙一下,谢谢…
 
easy...
把程序里两处 var buf:array[1..2] of string ;
改为 var buf:array[1..2] of widestring ;
就OK了.
 
type
MyString=array [0..20] of char;

procedure TForm1.Button1Click(Sender: TObject);
var
buf:array[1..2] of MyString ;
begin
with TFileStream.Create('c:/1.txt', fmCreate) do
try
StrCopy(Buf[1],PChar(label1.Caption));
Buf[2] := 'abc';
Write(Buf[1], sizeof(MyString));
Write(Buf[2], sizeof(MyString));
finally
Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
buf:array[1..2] of MyString ;
begin
with TFileStream.Create('c:/1.txt', fmOpenRead ) do
try
read(Buf[1], sizeof(MyString));
read(Buf[2], sizeof(MyString));
Memo1.Lines.Add(buf[1]);
Memo1.Lines.Add(buf[2]);
finally
Free;
end;
end;
 
kaida 的方案不错,可行,谢谢…同时也非常感谢zywcd及其他各位兄弟,再次谢过…
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
705
import
I
后退
顶部