为什么写入的文件只有512字节?(50分)

  • 主题发起人 主题发起人 kawais
  • 开始时间 开始时间
K

kawais

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将一个stringgrid中的字符串写入一个文件.
但最后生成的文件只有512个字节.为什么??
源码如下:
var
j:integer;
f1:textfile;
begin
assignfile(f1,savedialog1.filename);
Rewrite(F1);
if savedialog1.Execute then begin
for j:=1 to stringgrid1.RowCount do
begin
write(f1,string(stringgrid1.cells[0,j]));
write(f1,#13);
write(f1,#10);
end;
end;
end;
 
你的RowCount是等于2吧?
把字符串写入文件时长度不能大于255,我估计你的cells的值是超过255了,然后它自动截掉

为什么不能超过255,你可以这样试试:
var
s: string[1024];

write(f,s);
编译的时候应该通不过
(我印象中是这样,呵呵)
 
一句话就可搞定
if savedialog1.Execute then
StringGrid1.Cols[0].SaveToFile(SaveDialog1.FileName);
 
实在是高.
但我不想把所有的cols写入文件,只是从中抽一部分出来.
rowcount值不定,每一个cell中字符串也不会大于255.
 
//你可以先生成一个TStringList,然后利用StringList的SaveToFIle事件直接写入文件
//如果数据不对的话你再把TStringList显示在界面的ListBox,就可以看出哪出错了
procedure TForm1.Button1Click(Sender: TObject);
var
StrList : TStringList;
J : Integer;
begin
if not OpenDialog1.Execute then
Exit;
StrList := TStringList.Create;
try
for J := 0 to StringGrid1.RowCount do
StrList.Add(StringGrid1.Cells[0, J]);
StrList.SaveToFile(OpenDialog1.FileName);
finally
StrList.Free;
end;
end;
 
我这边有个相对简单的办法,只是在你的基础上做了个小改动,我这边可以测试通过
var
j:integer;
f1:textfile;
begin
if savedialog1.Execute then begin
assignfile(f1,savedialog1.filename);
Rewrite(F1);
for j:=1 to stringgrid1.RowCount do
begin
write(f1,string(stringgrid1.cells[0,j])+#13#10);
end;
flush(f1);
closefile(f1);
end;
说明:write函数的第一个参数没有长度的限制的,Milpas的说法是完全错误的!
 
thanks
可不可以告诉我,为什么我写的那个不行吗?
 

Similar threads

后退
顶部