Вот любопытное явление. У меня есть приложение Delphi 10.3, которое начало записывать повторяющиеся записи в файл TIniFile
.
Вот код:
with TIniFile.Create(UserDatFileName) do
try
WriteInteger(SFormName, 'Top', AForm.Top);
WriteInteger(SFormName, 'Left', AForm.Left);
WriteInteger(SFormName, 'Height', AForm.Height);
WriteInteger(SFormName, 'Width', AForm.Width);
WriteString(SFormName, 'WindowState', SWindowState);
finally
Free;
end;
Это отлично работало в течение многих лет. Теперь, внезапно, я получаю вывод следующим образом:
[fMainForm]
Top=0
Left=0
Height=556
Width=671
WindowState=wsMaximized
pnlNavigation.Width=165
TreeListcxTreeListModule.Width=161
Top=0
Left=0
Height=556
Width=671
WindowState=wsMaximized
pnlNavigation.Width=165
TreeListcxTreeListModule.Width=161
Top=0
Left=0
Height=556
Width=671
WindowState=wsMaximized
pnlNavigation.Width=165
TreeListcxTreeListModule.Width=161
... etcetera etcetera
Любые предложения о том, почему это может происходить? Я думал, что пары значений TIniFile
должны быть уникальными в каждом разделе?
WritePrivateProfileString
API) блокирует только часть файла для записи. Так что, возможно, если значение не существует, несколько приложений смогут добавить его одновременно. - person GolezTrol   schedule 29.12.2020TMemIniFile
. Это значение по умолчанию на любой платформе, отличной от Windows, и оно также хорошо работает в Windows. Даже немного быстрее. Вы можете сбросить все изменения сразу, вместо того, чтобы вызывать этот относительно медленный API при каждой записи. - person GolezTrol   schedule 29.12.2020