我前些时候写了一个小程序,做了一个存档的功能,用文本文件存的,结果总是报错,程序流程是这样的,先开始初始化各种参数,都没错,然后看存不存在save.txt,如果不存在就创建这个文件,然后就往这个文件里写内容,存在的问题是如果文件夹下不存在这个存档文件,程序能够创建,但写不进去,一到append(F),就出错了,I/o-32,这是什么错误,如果存档文件已经存在了,程序能够顺利的执行下去,这是什么原因?

解决方案 »

  1.   

    how do you open the file?
    which function or parameter do you use? rewrite?
      

  2.   

    Procedure Write_log(LogMsg:string);
    var
       MyLogfilename:string;
       MyFile: TextFile;
       i:integer;
    begin
       LogMsg := LogMsg;
       MyLogfilename := GetCurrentDir()+ '\PhoneLog.txt';
       if not FileExists(MyLogfilename) then begin
          i:= FileCreate(MyLogfilename);
          //FileClose(i);
       end;
       Assign(MyFile,MyLogfilename);
       Append(MyFile);
       Writeln(MyFile,LogMsg);
       CloseFile(MyFile);
    end;
      

  3.   

    Procedure Write_log(LogMsg:string);
    var
       MyLogfilename:string;
       MyFile: TextFile;
       i:integer;
    begin
       LogMsg := LogMsg;
       MyLogfilename := GetCurrentDir()+ '\PhoneLog.txt';
       if not FileExists(MyLogfilename) then begin
          i:= FileCreate(MyLogfilename);
          //FileClose(i);
       end;
       Assign(MyFile,MyLogfilename);
       Append(MyFile);
       Writeln(MyFile,LogMsg);
       CloseFile(MyFile);
    end;
      

  4.   

    procedure Write_log(LogMsg: string);
    var
      MyLogfilename: string;
      MyFile: TextFile;
    begin
      LogMsg := LogMsg;
      MyLogfilename := ExtractFilePath(ParamStr(0)) + 'PhoneLog.txt';
      if not FileExists(MyLogfilename) then
        FileClose(FileCreate(MyLogfilename)); //FileClose()
      AssignFile(MyFile,MyLogfilename); //Assign()->AssignFile()
      Append(MyFile);
      Writeln(MyFile, LogMsg);
      CloseFile(MyFile);
    end;
      

  5.   

    FileCreate();后没有调用FileClose();关闭文件句柄,这样文件就被占用了
      

  6.   

    同意
    最后append最好是在try..finally..end中。
      AssignFile(MyFile,MyLogfilename); //Assign()->AssignFile()
      Append(MyFile);
      try
        Writeln(MyFile, LogMsg);
      finally
        CloseFile(MyFile);
      end;
    保证句柄被关闭