procedure TForm1.Button1Click(Sender: TObject); var myini:Tinifile; begin myini:=Tinifile.Create(extractfilepath(application.ExeName)+'config.ini'); try myini.WriteString('user','user',edit7.Text); myini.WriteString('user','pwd',edit8.Text); myini.WriteString('user','unit',edit9.Text); finally myini.Free ; StatusBar1.Panels[1].Text:='已保存用户信息'; end; end;
以上是Tinifile的应用,下面是Tinifile的声明与实现:
声明:
{$IFDEF MSWINDOWS} { TIniFile - Encapsulates the Windows INI file interface (Get/SetPrivateProfileXXX functions) } TIniFile = class(TCustomIniFile) public destructor Destroy; override; function ReadString(const Section, Ident, Default: string): string; override; procedure WriteString(const Section, Ident, Value: String); override; procedure ReadSection(const Section: string; Strings: TStrings); override; procedure ReadSections(Strings: TStrings); override; procedure ReadSectionValues(const Section: string; Strings: TStrings); override; procedure EraseSection(const Section: string); override; procedure DeleteKey(const Section, Ident: String); override; procedure UpdateFile; override; end; {$ELSE} TIniFile = class(TMemIniFile); {$ENDIF}
{$IFDEF MSWINDOWS} { TIniFile } destructor TIniFile.Destroy; begin UpdateFile; // flush changes to disk inherited Destroy; end; function TIniFile.ReadString(const Section, Ident, Default: string): string; var Buffer: array[0..2047] of Char; begin SetString(Result, Buffer, GetPrivateProfileString(PChar(Section), PChar(Ident), PChar(Default), Buffer, SizeOf(Buffer), PChar(FFileName))); end; procedure TIniFile.WriteString(const Section, Ident, Value: string); begin if not WritePrivateProfileString(PChar(Section), PChar(Ident), PChar(Value), PChar(FFileName)) then raise EIniFileException.CreateResFmt(@SIniFileWriteError, [FileName]); end; procedure TIniFile.ReadSections(Strings: TStrings); const BufSize = 16384; var Buffer, P: PChar; begin GetMem(Buffer, BufSize); try Strings.BeginUpdate; try Strings.Clear; if GetPrivateProfileString(nil, nil, nil, Buffer, BufSize, PChar(FFileName)) <> 0 then begin P := Buffer; while P^ <> #0 do begin Strings.Add(P); Inc(P, StrLen(P) + 1); end; end; finally Strings.EndUpdate; end; finally FreeMem(Buffer, BufSize); end; end; procedure TIniFile.ReadSection(const Section: string; Strings: TStrings); const BufSize = 16384; var Buffer, P: PChar; begin GetMem(Buffer, BufSize); try Strings.BeginUpdate; try Strings.Clear; if GetPrivateProfileString(PChar(Section), nil, nil, Buffer, BufSize, PChar(FFileName)) <> 0 then begin P := Buffer; while P^ <> #0 do begin Strings.Add(P); Inc(P, StrLen(P) + 1); end; end; finally Strings.EndUpdate; end; finally FreeMem(Buffer, BufSize); end; end; procedure TIniFile.ReadSectionValues(const Section: string; Strings: TStrings); var KeyList: TStringList; I: Integer; begin KeyList := TStringList.Create; try ReadSection(Section, KeyList); Strings.BeginUpdate; try Strings.Clear; for I := 0 to KeyList.Count - 1 do Strings.Add(KeyList[I] + '=' + ReadString(Section, KeyList[I], '')) finally Strings.EndUpdate; end; finally KeyList.Free; end; end; procedure TIniFile.EraseSection(const Section: string); begin if not WritePrivateProfileString(PChar(Section), nil, nil, PChar(FFileName)) then raise EIniFileException.CreateResFmt(@SIniFileWriteError, [FileName]); end; procedure TIniFile.DeleteKey(const Section, Ident: String); begin WritePrivateProfileString(PChar(Section), PChar(Ident), nil, PChar(FFileName)); end; procedure TIniFile.UpdateFile; begin WritePrivateProfileString(nil, nil, nil, PChar(FFileName)); end; {$ENDIF}