Delphi 创建 TFileStream 的访问冲突
Delphi Access violation creating TFileStream
我在 fs.create(...) 上收到创建 TFileStream 对象的访问冲突,但我真的不知道出了什么问题
var
sr: TStreamReader;
fs: TFileStream;
begin
try
fs.Create('aaa.ini',fmOpenRead);
sr := tStreamReader.Create(fs,TEncoding.UTF8);
with connAtomo do begin
Close;
with Params do begin
Clear;
while not sr.EndOfStream do begin
add(sr.ReadLine);
end;
end;
end;
sr.Free;
fs.free
except
on e: EFileStreamError do begin
showmessage('File error '+e.Message);
end;
end;
访问冲突是由创建 TFileStream 实例的错误方法引起的,导致 fs
变量具有无效值。与任何其他对象一样,您必须调用 class 构造函数并将结果分配给变量:fs := TFileStreaM.create('aaa.ini', fmOpenRead);
.
我修改了你的代码:
var
sr : TStreamReader;
fs : TFileStream;
begin
try
fs := TFileStream.Create('aaa.ini', fmOpenRead);
try
sr := tStreamReader.Create(fs, TEncoding.UTF8);
try
connAtomo.Close;
connAtomo.Params.Clear;
while not sr.EndOfStream do
connAtomo.Params.Add(sr.ReadLine);
finally
sr.Free;
end;
finally
fs.Free
end;
except
on E: EFileStreamError do
ShowMessage('File error ' + E.Message);
end;
end;
如您所见,我已经使用 try/finally
来保护分配的对象并删除不推荐的 with
用法。
我在 fs.create(...) 上收到创建 TFileStream 对象的访问冲突,但我真的不知道出了什么问题
var
sr: TStreamReader;
fs: TFileStream;
begin
try
fs.Create('aaa.ini',fmOpenRead);
sr := tStreamReader.Create(fs,TEncoding.UTF8);
with connAtomo do begin
Close;
with Params do begin
Clear;
while not sr.EndOfStream do begin
add(sr.ReadLine);
end;
end;
end;
sr.Free;
fs.free
except
on e: EFileStreamError do begin
showmessage('File error '+e.Message);
end;
end;
访问冲突是由创建 TFileStream 实例的错误方法引起的,导致 fs
变量具有无效值。与任何其他对象一样,您必须调用 class 构造函数并将结果分配给变量:fs := TFileStreaM.create('aaa.ini', fmOpenRead);
.
我修改了你的代码:
var
sr : TStreamReader;
fs : TFileStream;
begin
try
fs := TFileStream.Create('aaa.ini', fmOpenRead);
try
sr := tStreamReader.Create(fs, TEncoding.UTF8);
try
connAtomo.Close;
connAtomo.Params.Clear;
while not sr.EndOfStream do
connAtomo.Params.Add(sr.ReadLine);
finally
sr.Free;
end;
finally
fs.Free
end;
except
on E: EFileStreamError do
ShowMessage('File error ' + E.Message);
end;
end;
如您所见,我已经使用 try/finally
来保护分配的对象并删除不推荐的 with
用法。