为什么不能写入文件?(在线等待)(50分)

  • 主题发起人 主题发起人 3368aa
  • 开始时间 开始时间
3

3368aa

Unregistered / Unconfirmed
GUEST, unregistred user!
请看
type
tsetdata=record
date:Tdatetime;
str:string[30];
play:string[60];
end;
var
Form1: TForm1;
mydata:file of tsetdata;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
dat:tsetdata;
begin

dat.date:=now;
dat.str:='123456';
dat.play:='';
assignfile(mydata,'h:/me.dat');
try
if fileEXists('h:/me.dat')=false then rewrite(mydata);
write(mydata,dat);
finally
closefile(mydata);
end;
end;

为什么会出现 ‘I/O error 103’??

水平不高,请尽量给出源码?
 
我很急,请大家帮帮忙。在线等待。

谢谢了!!![:D][:D]
 
您真逗,您的H: 也是硬盘吗?
assignfile(mydata,'h:/me.dat');
 
那应该怎么写?
我刚学时间不长呀!!
 
assignfile(mydata,'c:/me.dat');
if fileEXists('c:/me.dat')=false then rewrite(mydata);

h盘符改为c

 
大家就帮帮忙吧

最好能说的详细一点
 
加上编译开关
{$I-}
assignfile(mydata,'h:/me.dat');
try
if fileEXists('h:/me.dat')=false then rewrite(mydata);
write(mydata,dat);
finally
closefile(mydata);
end;
{$I+}
 
出现I/O错误,要不是H盘不能写(或无权写),要不就是H盘坏
rewrite要先初始化一下文件,常用命令有:
REWRITE,APPEND
 
你是不是没有H盘啊???
应该可以写的,虽然你有问题程序中。
 
各位,我有H盘,而且可用,就是不知道为什么?

我用winXP+D6

请大家畅所欲言
 
给个例子给你:
type
TInfo = record
OwnerName,OwnerPassword:string[32];
ProxyUser,ProxyPassword:string[32];
AutoRun:Boolean;
end;

TInfoFile = file of TInfo;
.......

procedure TForm1.FormCreate(Sender: TObject);
var
F:TInfoFile;
TmpInfo:TInfo;
begin
FN:=ExtractFilePath(Application.ExeName )+'Setting.dat';
if not FileExists(FN) then
begin
AssignFile(F,FN);
Rewrite(F);
Info.OwnerName:='liuyx';
Info.OwnerPassword:='bondliu';
Info.ProxyUser :='myh';
Info.ProxyPassword :='613';
Info.AutoRun :=False;
XP_CheckBox4.Checked :=Info.AutoRun
TmpInfo:=Info;
CodeDecodeInfo(TmpInfo);
Write(F,TmpInfo);
end
else
begin
AssignFile(F,FN);
Reset(F);
Read(F,TmpInfo);
CodeDecodeInfo(TmpInfo);
Info:=TmpInfo;
XP_CheckBox4.Checked :=Info.AutoRun
end;
CloseFile(F);
end;
 
另外,你的代码是不是该改为:
procedure TForm1.Button1Click(Sender: TObject);
var
dat:tsetdata;
begin

dat.date:=now;
dat.str:='123456';
dat.play:='';
assignfile(mydata,'h:/me.dat');
try
if fileEXists('h:/me.dat')=false then
rewrite(mydata)
else
begin
reset(mydata);
seek(mydata,filesize(mydata));
end;
write(mydata,dat);
finally
closefile(mydata);
end;
end;
{来自帮助文件
procedure Write(F, V1,...,Vn);
Description
Write writes a file to a file component. F is a file variable, and each V is a variable of the same type as the component type of F. For each variable written, the current file position is advanced to the next component. If the current file position is at the end of the file (that is, if Eof(F) is True), the file is expanded.
}
 
如果你的me.dat文件存在,那么就不能执行到rewrite这句话,直接写数据write,
这样文件还没有打开就写数据,就会有I/O错误了.
看看改成这样子行不行:

assignfile(mydata,'h:/me.dat');
try
if fileEXists('h:/me.dat')=false then
rewrite(mydata)
else //////////////
reset(mydata)
//////////////
write(mydata,dat);
finally
closefile(mydata);
end;
 
godzhou的是覆盖原文件写,
刘李子的是append原文件写。
 

同意godzhou的。
 
把:
try
if fileEXists('h:/me.dat')=false then rewrite(mydata);
write(mydata,dat);
finally
closefile(mydata);
end;
改为如下试试:
try
if fileEXists('h:/me.dat') then
Reset(mydata);
else
ReWrite(mydata);
write(mydata,dat);
finally
closefile(mydata);
end;

 
多人接受答案了。
 
后退
顶部