var
ini : TMemIniFile;
sBuf , sName :
String
;
FM : TFileStream;
bIsUTF :
Boolean
;
begin
//这一段 获取一个临时文件路径和名称,存到变量sName中
SetLength(sName, MAX_PATH);
FillChar(
Pointer
(sName)^ , MAX_PATH,
0
);
Windows
.
GetTempPath(MAX_PATH,
Pointer
(sName));
sName := Trim(sName) +
'temp_1.0.ini'
;
//这一段读取要修改的ini文件,存到变量sBuf中
FM := TFileStream
.
Create(
'e:\d.ini'
, fmOpenRead);
if
FM
.
Size=
0
then
begin
FM
.
Free;
exit;
end
;
SetLength(sBuf, FM
.
Size);
FM
.
Read(
Pointer
(sBuf)^, FM
.
Size);
FM
.
Free;
//判断是否是UTF-8字符集,如果是转换成String字符(Delphi7默认为Ansi字符集)
bIsUTF := Copy(sBuf ,
1
,
3
) = #
$EF
#
$BB
#
$BF
;
if
bIsUTF
then
begin
Delete(sBuf ,
1
,
3
);
sBuf := UTF8Decode(sBuf);
end
;
//把转换好的字符集保存到临时文件中
FM := TFileStream
.
Create(sName, fmCreate);
FM
.
WriteBuffer(
Pointer
(sBuf)^ , Length(sBuf));
FM
.
Free;
//修改ini文件的内容***********************
ini := TMemIniFile
.
Create(sName);
ini
.
WriteString(
'sys'
,
'Name'
,
'V汉字文才能体现UTF8lue'
);
ini
.
UpdateFile;
//保存到文件,即临时文件
ini
.
Free;
//读取已经修改并保存的ini文件到字符串sBuf中
FM := TFileStream
.
Create(sName, fmOpenRead);
SetLength(sBuf, FM
.
Size);
FM
.
Read(
Pointer
(sBuf)^, FM
.
Size);
FM
.
Free;
DeleteFile(sName);
//删除临时文件
//转换为UTF-8字符集
if
bIsUTF
then
begin
sBuf := UTF8Encode(sBuf);
sBuf := #
$EF
#
$BB
#
$BF
+ sBuf;
//加上BOM
end
;
//把转换好的字符集,直接覆盖保存到待修改的ini文件中
FM := TFileStream
.
Create(
'e:\d.ini'
, fmCreate);
FM
.
WriteBuffer(
Pointer
(sBuf)^ , Length(sBuf));
FM
.
Free;
end
;