Delphi Ini文件对UTF8支持不爽的极简替代方案

发布于:2025-04-18 ⋅ 阅读:(17) ⋅ 点赞:(0)

如题,没太多废话,直接复制走即可。

unit uConfig;

interface

uses classes, Sysutils;

type

TConfig = class
private
    FFileName: String;
    FConfig:TStringList;
protected

public
  constructor Create(ConfigFile:String);
  destructor Destroy;
  property  FileName:String read FFileName write FFileName;
  function  Read(AName:String;Default:String):String;overload;
  function  Read(AName:String;Default:Integer):Integer;overload;
  function  Read(AName:String;Default:Single):Single;overload;
  procedure Write(AName:String;AValue:String); overload;
  procedure Write(AName:String;AValue:Integer); overload;
  procedure Write(AName:String;AValue:Single); overload;

published

end;

implementation

{ TConfig }

constructor TConfig.Create(ConfigFile:String);
begin
     FConfig:= TStringList.Create;
     FFileName:=ConfigFile;
     if FileExists(ConfigFile) then
        FConfig.LoadFromFile(FFileName,TEncoding.UTF8)
     else
        FConfig.SaveToFile(FFileName,TEncoding.UTF8);
end;

destructor TConfig.Destroy;
begin
    FConfig.Free;
end;

function TConfig.Read(AName, Default: String): String;
var Idx:Integer;
begin
     Idx := FConfig.IndexOfName(aName);
     if Idx>-1 then
     result:= FConfig.ValueFromIndex[Idx]
     else
     result:=Default;
end;

function TConfig.Read(AName: String; Default: Single): Single;
begin
     if not TryStrToFloat(Read(AName,Default.ToString),result) then
     result := Default;
end;

function TConfig.Read(AName: String; Default: Integer): Integer;
begin
     if not TryStrToInt(Read(AName,Default.ToString),result) then
     result := Default;
end;

procedure TConfig.Write(AName, AValue: String);
var Idx:Integer;
begin
     Idx := FConfig.IndexOfName(aName);
     if Idx>-1 then
     FConfig.ValueFromIndex[Idx]:=AValue
     else
     FConfig.AddPair(AName,aValue);
     FConfig.SaveToFile(ExtractFilePath(ParamStr(0))+'Config',TEncoding.UTF8);
end;

procedure TConfig.Write(AName: String; AValue: Integer);
begin
     Write(AName,AValue.ToString);
end;

procedure TConfig.Write(AName: String; AValue: Single);
begin
     Write(AName,AValue.ToString);
end;


end.
在这里插入代码片

没有测试UTF8效果,理论100%!


网站公告

今日签到

点亮在社区的每一天
去签到