我需要打开一个INI文件并读取一个特定值并检查它是否有不同的更改。
但是案例是我的INI文件没有任何部分或键值
例如,该文件仅包含2行以下。我需要的是阅读第二行(应该是16001)。如果不匹配则更改那个。
Nexusdb@localhost
16000
请提出任何想法,这对我很有帮助!
提前谢谢。
答案 0 :(得分:3)
您的文件不是INI文件。它不仅没有部分,甚至没有键。
您必须将文件编辑为纯文本文件。您不能使用INI文件功能。
此代码将执行:
function GetLastError(): LongInt; external 'GetLastError@kernel32.dll stdcall';
function SetLineInFile(FileName: string; Index: Integer; Line: string): Boolean;
var
Lines: TArrayOfString;
Count: Integer;
begin
if not LoadStringsFromFile(FileName, Lines) then
begin
Log(Format('Error reading file "%s". %s', [FileName, SysErrorMessage(GetLastError)]));
Result := False;
end
else
begin
Count := GetArrayLength(Lines);
if Index >= GetArrayLength(Lines) then
begin
Log(Format('There''s no line %d in file "%s". There are %d lines only.', [
Index, FileName, Count]));
Result := False;
end
else
if Lines[Index] = Line then
begin
Log(Format('Line %d in file "%s" is already "%s". Not changing.', [
Index, FileName, Line]));
Result := True;
end
else
begin
Log(Format('Updating line %d in file "%s" from "%s" to "%s".', [
Index, FileName, Lines[Index], Line]));
Lines[Index] := Line;
if not SaveStringsToFile(FileName, Lines, False) then
begin
Log(Format('Error writting file "%s". %s', [
FileName, SysErrorMessage(GetLastError)]));
Result := False;
end
else
begin
Log(Format('File "%s" saved.', [FileName]));
Result := True;
end;
end;
end;
end;
使用它像:
SetLineInFile(ExpandConstant('{app}\Myini.ini'), 1, '16001');
(索引从零开始)