delphi 写日志文件I/O error 32
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 写日志文件I/O error 32相关的知识,希望对你有一定的参考价值。
我写了一个函数用来写日志,但是写的时候提示出错。I/O error 32。我查了下错误原因应该是定时器同时写入的问题,然后我用了2中线程方法处理,但是都没用,结果一样,帮忙看下怎么回事。
procedure TEventLog.RecordLog(Log: string);
var
f:Textfile;
FileName:string;
name:string;
begin
if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
begin
name:=FormatDateTime('yyyymmdd',now);
FileName:=ExtractFilePath(Paramstr(0))+'log\'+name+'.log'; //保存文件名
AssignFile(f, FileName);
try
if FileExists(FileName)= False then
Rewrite(f)
else
Append(f);
Writeln(f,FormatDateTime('yy''-''mm''-''dd hh:nn:ss ',Now) + Log);
finally
CloseFile(f);
end;
ReleaseMutex(hMutex);
end;
end;
procedure TEventLog.RecordLog(Log: string);
var
f:Textfile;
FileName:string;
name:string;
begin
criticalsection.enter;
try
name:=FormatDateTime('yyyymmdd',now);
FileName:=ExtractFilePath(Paramstr(0))+'log\'+name+'.log'; //保存文件名
AssignFile(f, FileName);
try
if FileExists(FileName)= False then
Rewrite(f)
else
Append(f);
Writeln(f,FormatDateTime('yy''-''mm''-''dd hh:nn:ss ',Now) + Log);
finally
CloseFile(f);
end;
finally
criticalsection.leave;
end;
end;
将 Textfile 设置为全局变量,程序初始化时,载入Textfile,将所有写Textfile 文件的操作,都由一个函数来执行,程序关闭时才CloseFile(Textfile) 。
追加文件内容速度很快,但是载入文件和关闭文件是非常缓慢的,这两过程所消耗的时间非常巨大的。一直载入/关闭的话,一点效率也没有。小文件还行,只要上M就可以明显感觉出来了。 参考技术A 注意一下线程同步!
MySQL主从同步是怎样实现的?
从库生成两个线程,一个I/O线程,一个SQL线程; i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中; 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog; SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。
详细实现过程:
http://quliren.blog.51cto.com/9849266/1899877
以上是关于delphi 写日志文件I/O error 32的主要内容,如果未能解决你的问题,请参考以下文章
I/O error on GET request for,PKIX path building failed,,unable to find valid certification path
在 Python 中等待 Windows 文件 I/O 完成
主从复制报错Fatal error:The slave I/O thread stops because master and slave have equal MySQL server UUIDs;