这是一个VCL应用程序,我有一个与我的Ini文件的链接,我想继续在其中添加带有时间和日期戳的行,只需按一个按钮。
private
FLog: TStringList;
FIni: TIniFile;
aTime: TDateTime;
procedure TForm2.btnBreakClick(Sender: TObject);
begin
FLog := TStringList.Create;
try
aTime := Now;
begin
FIni.WriteString('FileName', 'Break', FormatDateTime('dd/mm/yyyy hh:nn', aTime));
end;
finally
FLog.Free;
end
end;使用这段代码,我只能替换以前的时间和日期戳,我曾尝试使用for循环来替换,但没有成功。
这是当前几行代码的结果。
[FileName]
Break=09-10-2018 13:35我想要的是,每次我点击break按钮,它需要添加到文件中的另一个时间。
发布于 2018-10-09 22:50:58
INI文件包含键/值对。要完成您所要求的操作,您需要在每次按下按钮时创建一个唯一的键名,否则您将覆盖每次现有的值,正如您已经发现的那样。
尝试更多像这样的东西:
procedure TForm2.btnBreakClick(Sender: TObject);
var
Keys: TStringList;
MaxBreak, I, Num: Integer;
begin
MaxBreak := 0;
Keys := TStringList.Create;
try
FIni.ReadSection('FileName', Keys);
for I := 0 to Keys.Count-1 do
begin
if StartsText('Break', Keys[I]) then
begin
if TryStrToInt(Copy(Keys, 6, MaxInt), Num) then
begin
if Num > MaxBreak then
MaxBreak := Num;
end;
end;
end;
finally
Keys.Free;
end;
FIni.WriteString('FileName', 'Break'+IntToStr(MaxBreak+1), FormatDateTime('dd/mm/yyyy hh:nn', Now));
end;或者这样:
procedure TForm2.btnBreakClick(Sender: TObject);
var
I: Int64;
Key: string;
begin
for I := 1 to Int64(MaxInt) do
begin
Key := 'Break' + IntToStr(I);
if not FIni.ValueExists('FileName', Key) then
begin
FIni.WriteString('FileName', Key, FormatDateTime('dd/mm/yyyy hh:nn', Now));
Exit;
end;
end;
end;或者这样:
procedure TForm2.btnBreakClick(Sender: TObject);
var
NumBreaks: Integer;
begin
NumBreaks := FIni.ReadInteger('FileName', 'NumBreaks', 0);
Inc(NumBreaks);
FIni.WriteInteger('FileName', 'NumBreaks', NumBreaks);
FIni.WriteString('FileName', 'Break' + IntToStr(NumBreaks), FormatDateTime('dd/mm/yyyy hh:nn', Now));
end;发布于 2018-10-10 01:01:18
尽管你提到了TIniFile,但你的帖子和评论告诉我,这不一定是你想要的。尽管可以使用TIniFile (如另一个答案所示),但它实际上并不适用于您所描述的用法。
对于简单的事件记录,我建议使用一个普通的文本文件,以及向其中添加事件的TStringList,如下例所示。这个例子是我很久以前用过的代码的简化摘录。
var
EventFile: TFileName;
procedure EventRecorder(EventTime: TDateTime; Description, Comment: string);
var
sl: TStringList;
es: string;
begin
sl: TStringList;
try
if FileExists(EventFile) then
sl.LoadFromFile(EventFile);
es := FormatDateTime('yyyy-mm-dd hh:nn:ss', EventTime)+' '+Description+' '+comment;
sl.Add(es);
sl.SaveToFile(EventFile);
finally
sl.free;
end;
end; 典型用法
procedure TForm2.btnBreakClick(Sender: TObject);
begin
EventRecorder(now, 'Break', '');
end;https://stackoverflow.com/questions/52721618
复制相似问题