안녕하세요!
로깅 시에 메인 프로그램의 버전 체크를 하여 현 시스템의 버전이 낮을 경우
새 버전을 서버로 부터 전송 받게 됩니다.
이때 INI 파일을
1. 쓰기전용으로 바꾸고, (FileSetAttr(파일명, not faReadOnly and faArchive and not faHidden))
2. 새버전으로 바꾼후
3. 다시 읽기전용으로 바뀌게 됩니다.(FileSetAttr(파일명, faReadOnly and (not faArchive ) or faHidden))
문제는 위의 2번과 3번의 시간차로 INI파일이 새버전으로 수정되지 않더군요.
2번과 3번 사이에 Loop을 두어서 시간차를 주었더니 파일이 수정되었습니다.
(for i := 0 to 10000
for j := 0 to 100000)
이 방법 이외의 것을 알고 계시는 분이면 답변 부탁드립니다.
문영미 올림.
> 안녕하세요!
>
> 로깅 시에 메인 프로그램의 버전 체크를 하여 현 시스템의 버전이 낮을 경우
> 새 버전을 서버로 부터 전송 받게 됩니다.
>
> 이때 INI 파일을
> 1. 쓰기전용으로 바꾸고, (FileSetAttr(파일명, not faReadOnly and faArchive and not faHidden))
> 2. 새버전으로 바꾼후
> 3. 다시 읽기전용으로 바뀌게 됩니다.(FileSetAttr(파일명, faReadOnly and (not faArchive ) or faHidden))
>
> 문제는 위의 2번과 3번의 시간차로 INI파일이 새버전으로 수정되지 않더군요.
>
> 2번과 3번 사이에 Loop을 두어서 시간차를 주었더니 파일이 수정되었습니다.
> (for i := 0 to 10000
> for j := 0 to 100000)
>
> 이 방법 이외의 것을 알고 계시는 분이면 답변 부탁드립니다.
>
> 문영미 올림.
// INI 파일을 사용하면서 이 파일에 어떤변화(수정,추가,삭제...)
// 를 주었을때 Windows 의 INI 파일들은 그 변화가 곧바로 INI파일에
// 반영되지 않고 cached 됩니다
// 이 INI파일에 변화를 주었을때 곧바로 cache 를 flush 하는
// API함수가 있습니다
// 아래의 예제를 보세요
procedure TForm1.B_SaveINIClick(hostpro: String);
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create('test.ini');
try
IniFile.WriteString('Section1', 'Name1', 'Value1');
IniFile.DeleteKey('Section2', 'Name2');
finally
IniFile.Free;
// < INI file flushing >
WritePrivateProfileString(nil, nil, nil, 'test.ini');
end;
end;