现象:如果执行了filecreate的话,在Append(f)时就出现“I/O Error 32”的错误。
如果不执行的话,没有问题
代码:
procedure TLoger.writeLog(info: string);
var
 strdate,str:string;
 curpath:string;
 f:TextFile;
begin
  strdate:=formatDatetime('yyyy_mm_dd',now);
  curpath:=ExtractFilePath(Application.ExeName);
  if not fileExists(curpath+'\Log\'+strdate+'.txt') then
     filecreate(curpath+'\Log\'+strdate+'.txt');//如果执行这句的话,在Append(f)的时候出错
  AssignFile(f,curpath+'\Log\'+strdate+'.txt');
  Append(f);
  WriteLn(f,formatdatetime('hh:nn:ss',now)+'  '+info);
  CloseFile(f);
end;

解决方案 »

  1.   

    {***************************************************************
    //函数名: WriteLog(strlog:string);                       //
    //功能描述:将备份和优化时的日志写入                       //
    //输入参数:strlog 日志内容                                //
    //输出参数: 无                                            //
    //修改:                                                   //
    //附加说明:                                               //
    ***************************************************************}
    procedure TNP_AssistantFrm.WriteLog(strlog:string);
    var
      HFile:TextFile;
      strFile:string;
    begin
       strFile := ExtractFilePath(paramstr(0))+'Log\';
       if not DirectoryExists(strFile) then
         CreateDir(strFile);
       try
         strfile := strFile + FormatDateTime('yyyymmdd',StrToDateTime(GetMySqlServerTime))+'.log';
         AssignFile(Hfile,strFile);
         if FileExists(strfile) then
           Append(Hfile)
         else
           ReWrite(HFile);
         writeln(Hfile,strlog);
       except
         on E: Exception do
         Application.MessageBox('写入日志错误','提示',MB_OK);
       end;
       closefile(Hfile);
    end;
      

  2.   

    用luke5678(~类~) 的就OK你的Create没有关闭句柄是不行的