写日志文件(TXT)(100分)

  • 主题发起人 主题发起人 LIU_CHENG_GANG2
  • 开始时间 开始时间
L

LIU_CHENG_GANG2

Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个函数写日志文件,总是只有最后一次写入的东西
请高手们指点:
源程序如下:

Procedure Write_log(LogMsg:string);
var
MyLogfilename:string;
MyFile: TextFile;
begin
LogMsg := Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + ogMsg;
MyLogfilename := GetCurrentDir()+ '/PhoneLog.txt';
if not FileExists(MyLogfilename) then
FileCreate(MyLogfilename);
Assign(MyFile,MyLogfilename);
FileMode:= fmOpenWrite;
rewrite(MyFile);
CloseFile(MyFile);
end;
 
//rewrite(MyFile);
append(MyFile);
CloseFile(MyFile);
 
同意楼上的
 
TO TYZhang:
我试了,不成功,而且一条也写不进了!
 
是不是要加FileOpen()?
应该不要吧?有ASSIGN()初始化了的!
老大们,代码粘下去试一试就OK,求求你们了!
我的东西要交工了,再不交,BOSS就减钱了!
 
// 很多办法可以写一个文件:),下面就是其中一个:)
Procedure Write_log(LogMsg:string);
var
Strings: TStrings;
begin
Strings:=TStringList.Create;
Strings.Add(Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + LogMsg);
Strings.SaveToFile(GetCurrentDir+ '/PhoneLog.txt');
Strings.Free;
end;
//下面是另一个:
Procedure Write_log2(LogMsg:string);
var
Stream: TStream;
s: string;
begin
Stream:=TFileStream.Create(GetCurrentDir+ '/PhoneLog.txt',fmCreate);
s:=Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + LogMsg;
Stream.WriteBuffer(s[1],length(s));
Stream.Free;
end;
// Pascal 的传统方式则是这样:
Procedure Write_log3(LogMsg:string);
var
F: TextFile;
begin
AssignFile(F,GetCurrentDir+ '/PhoneLog.txt');
Rewrite(F);
Writeln(Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + LogMsg);
CloseFile(F);
end;

// 如果你想要的是接着把文件写下去,而不是每次写新的内容,那么应该改成:

Procedure Write_log_1(LogMsg:string);
var
Strings: TStrings;
fn: string;
begin
fn:=GetCurrentDir+ '/PhoneLog.txt';
Strings:=TStringList.Create;
if FileExists(fn) then
Strings.LoadFromFile(fn);
Strings.Add(Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + LogMsg);
Strings.SaveToFile(fn);
Strings.Free;
end;
//下面是另一个:
Procedure Write_log2_1(LogMsg:string);
var
Stream: TStream;
fn,s: string;

begin
fn:=GetCurrentDir+ '/PhoneLog.txt';
if FileExists(fn) then
beign
Stream:=TFileStream.Create(fn,fmOpenWrite);
Stream.Seek(0,soFromEnd);
end
else Stream:=TFileStream.Create(fn,fmCreate);
s:=Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + LogMsg;
Stream.WriteBuffer(s[1],length(s));
Stream.Free;
end;
// Pascal 的传统方式则是这样:
Procedure Write_log3_1(LogMsg:string);
var
F: TextFile;
fn: string;
begin
fn:=GetCurrentDir+ '/PhoneLog.txt';
AssignFile(F,fn);
if FileExists(fn) then Append(fn)
else Rewrite(F);
Writeln(Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + LogMsg);
CloseFile(F);
end;

 
很全面了,对于你的要求,Procedure Write_log3_1(LogMsg:string)是最好的选择
 
另类一点的方法:
procedure Write_Log(const LogFileName, LogMsg: String;);
var
S1, S2: String;
begin
S1:= FormatDatetime('yyyy-mm-dd', now);
S2:= FormatDatetime('hh_nn_ss', now);
WritePrivateProfileString(PChar(S1), PChar(S2), PChar(LogMsg), PChar(LogFileName));
end;
我用着的,非常可靠,从 WINDOWS 3.1 到 WINDOWS 98
 
rewrite(MyFile);?????
当然是只有最后一次了。
建议看看TStringList.savetofile
 
把你的这句代码:
if not FileExists(MyLogfilename) then
FileCreate(MyLogfilename);
Assign(MyFile,MyLogfilename);
FileMode:= fmOpenWrite;
rewrite(MyFile,LogMsg);
CloseFile(MyFile);
改成:
Assign(MyFile,MyLogfilename);
if not FileExists(MyLogfilename) then
ReWrite(MyFile)
else
Reset(MyFile);
writeln(MyFile);
Flush(MyFile); //这句很重要
CloseFile(MyFile);
 
上面写错了,应该为Writeln(MyFile,Logmsg),写入你的日志记录
 
Procedure Write_log(LogMsg:string);
var
MyLogfilename:string;
MyFile: TextFile;
begin
LogMsg := Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + ogMsg;
MyLogfilename := GetCurrentDir()+ '/PhoneLog.txt';
Assignfile(MyFile,MyLogfilename);
try
if not FileExists(MyLogfilename) then
rewrite(MyLogfilename)
else
append(MyFile);
writeln(myfile,logmsg);
finally
CloseFile(MyFile);
end;
end;
 
找本书看看怎么对txt文件操作
 
to yfdciom:
Reset打开的文本文件是只读的,不能写,所以只能用Append:)
 
Assign(MyFile,MyLogfilename);
if not FileExists(MyLogfilename) then
ReWrite(MyFile)
else
//Reset(MyFile);
Append(MyFile);
writeln(MyFile,Logmsg);
CloseFile(MyFile);
 
谢谢各位!
问题已经解决,如下:
Procedure Write_log(LogMsg:string);
var
MyLogfilename:string;
MyFile: TextFile;
i:integer;
begin
LogMsg := Formatdatetime('yyyy-mm-dd hh:mm:ss',now) + ' ' + 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;
 
后退
顶部