我实在没牙了。。。 I/O erroe 103是什么错误?(源码)(30分)

  • 主题发起人 主题发起人 islet8
  • 开始时间 开始时间
I

islet8

Unregistered / Unconfirmed
GUEST, unregistred user!
错误信息:Project iTEXT.exe raised esception class EInOutError with message 'I/O error 103'
Process stopped.Use Step or Run to continue.

源码:
procedure TFormContact.OKBtnClick(Sender: TObject);
var
f:textfile;
s,fn:string;
i:integer;
Reg: TRegistry;
begin
fn:=ExpandFileName('Config.dat');
assignfile(f,fn);
reset(f);
for i:=1 to 3 do
readln(f);
if FastInPopup.checked=true then
begin
s:='0';
writeln(f,s)
//←软件运行到这儿出错!
try
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_CLASSES_ROOT;
Reg.OpenKey('*/Shell/iTEXT',True);
Reg.WriteString('','用iTEXT打开');
Reg.CloseKey;
Reg.OpenKey('*/Shell/iTEXT/Command',True);
Reg.WriteString('','"'+ParamStr(0)+'" "%1"');
Reg.CloseKey;
finally
Reg.Free;
end;
except
end;
end;
closefile(f);
close;
end;
 
都 OOP 时代了,怎还出现 writeln ????

用 FileStream 或 MemoryStream 试试吧,操作文件很方便的...
 
我刚学delphi,FileStream 或 MemoryStream 不懂,能解释么?
 

var
F: TMemoryStream;
begin
F:=TMemoryStream.Create;
F.LoadFromFile('CONFIG.DAT');
....
F.Read
....
F.Free;
end;
 
有什么好处?
 
因为Reset(f);是打开一个只读文件当然不能写了。
 
在写文件前调用ReWrite或Reset或Append;

AssignFile(f,YourFilename);
try
...
reset(f)
...
ReadLn
...
rewrite(f);
writeln()
...
finally
CloseFile(f);
end;

 
I/O Error 103 :是"File not open"
自己想想吧!
 
杜宝不是说能写(writeln)么?戴华又说不能写?我该怎么写?
 
Delphi的帮助:
...
procedure Reset(var F [: File
RecSize: Word ] );
...
If F is a text file, F becomes read-only.
^^^^^^^^^^^^^^^^^^^^
而ReWrite就没有这种问题了。

 
可我不想破坏其他的数据啊!
 
打开文件有3种方式
reset(f,recsize):是只读打开,用这种方式打开的文件,只能使用read 或readln 读出
Rewrite(var F: File [
Recsize: Word ] ):是重写打开,如果打开的文件不存在,将建立;
如果打开的文件已经建立,则先删除然后在建立。
append(var F: File [
Recsize: Word ] ):是追加打开,新写入的内容总是在原内容的最后边
 
在writeln前append(F)
 
在writeln前append(F)可以么?光标不是到最后去了么?
 
{$I-}
assignfile(f,'......');
//你的文件操作语句
closefile(f);
{$I+}
 
多人接受答案了。
 
后退
顶部