我在windows目录的win.ini文件中放置了一个自定义条目,在自定义[Login]部分下名为LoginCount,并在每次加载主视图时递增。在Form Create事件中,我访问win.ini并检查其值,如果达到1000,我会显示一条消息。但是发生了一件非常奇怪的事情。达到1000后,我手动将其值设置为0.但它仍然显示1000.我检查了路径,以防应用程序引用系统中的某个其他win.ini文件,但它是C:\ Windows \ win.ini 。这是代码:
procedure TfMain.FormCreate(Sender: TObject);
var
winIni: TIniFile;
windir_buf: array [0 .. 144] of Char;
WINDIR: string;
loginCount: integer;
begin
GetWindowsDirectory(windir_buf, sizeof(windir_buf));
WINDIR := StrPas(windir_buf) + '\';
ShowMessage(WINDIR+'win.ini');//Shows C:\Windows\win.ini
winIni := TIniFile.Create(WINDIR + 'Win.ini');
loginCount := winIni.ReadInteger('Login', 'LoginCount', 1);
ShowMessage(IntToStr(loginCount));//Shows 1000 although it's 0 in the actual file.
end;
知道为什么吗?
答案 0 :(得分:5)
这可能是由于文件系统虚拟化造成的。您正在Vista或更高版本下运行虚拟化进程,并且没有对Windows目录的写入权限。
调试这个没有意义。 Win.ini文件已被弃用近20年。你应该:
如果您根本无法停止使用Win.ini,那么您仍需要使用 requireAdministrator 选项添加清单。
如果您打算使用Win.ini(我无法表达您对此考虑的事实的厌恶程度),那么您应该使用GetProfileString
和SetProfileString
。由于文件是共享的,因此您需要使用同步该访问的函数来访问它。