Sprawdzenie zapisu do ini

0

Witam czy jest możliwość sprawdzenie czy zapis do ini już sie odbył, przez np sprawdzenie czy zwolnienie ini juz nastąpiło. Mianowicie mam procedurę zamykającą windowsa jednak procedura działa dość agresywnie i zamyka system natychmiast nie pozwalając na zapis ustawień programu do dwóch plików ini. dlatego chciałem najpierw wywołać zapis do ini, i jeśli by sie powiódł ustalić zmienna która przepuszczała by zamkniecie systemu. Czy jest to możliwe?

0
Ini := TIniFile.Create(...);
Try
 ...
Finally
 Saved := True;
 Ini.Free;
End;

Powinno zadziałać... ew.dodaj jakiś Sleep dwusekundowy or something.

0

No nie do końca o to mi chodziło z sama deklaracja zmiennej sobie poradzę, niestety sleep tez nie wchodzi w grę ponieważ zapis do ini odbywa się również z polecenia użytkownika wiec po co wstrzymywać prace programu. Czy klasa ini posiada jakąś kontrolkę zwracająca powodzenie zapisu od pliku, bądź np czy można zapis sprawdzić np.

if PlikINI.UpdateFile <> nil then cos tam

Oczywiście to tylko przykład.

0

Możesz przechwycić ewentualny wyjątek...

0

Jeśli mogę prosić o jakiś przykład, będę wdzięczny.

3

Może coś w tym rodzaju:

Function TMyConfigObject.SaveSettings: Boolean;
Const OutputFile = 'settings.ini';
Var Ini: TMyIniConfig;
Begin
 Ini := TMyIniConfig.Create(OutputFile, self);
 Try
  Try
   Ini.Save;
  Except
   Exit(False); // zapis sie nie powiodl   
  End;
 Finally
  Ini.Free;
 End;

 Result := FileExists(OutputFile);
End;

Ogólnie, to wywołaniu Ini.Free; dane muszą już być zapisane tak czy siak (jeżeli nie nastąpił żaden wyjątek ofc.).

0

Ok przerobiłem nieco Twoja funkcje i wszystko śmiga jak należy. Dzieki wielkie.

1

@tayamoto - zwróć uwagę na to, że klasa TIniFile nie przechowuje wprowadzonych zmian w pamięci, tylko zapisuje je od razu do pliku:

Delphi napisał(a)

TIniFile enables handling the storage and retrieval of application-specific information and settings in a standard INI file.

[...]

On Windows, a related object, TMemIniFile, works the same way as TIniFile, but buffers writes in memory to minimize disk access.

Free Pascal napisał(a)

TIniFile is an implementation of TCustomIniFile which does the same as TMemIniFile, namely it reads the whole file into memory. Unlike TMemIniFile it does not cache updates in memory, but immediatly writes any changes to disk.

Więc jeśli do końca używania klasy nie wystąpi wyjątek to znaczy, że wszystkie wprowadzone zmiany już zostały zapisane i nie masz czego sprawdzać;

Jeśli chcesz przechowywać w pamięci wprowadzone zmiany i sprawdzić tylko raz czy dane zostały zapisane - skorzystaj z klasy TMemIniFile i w bloku try .. except wywołuj metodę UpdateFile by zapisać wszystkie wprowadzone zmiany do pliku (od poprzedniego wywołania tej metody, lub jeśli jej wcześniej nie wywoływałeś to od stworzenia klasy).

1 użytkowników online, w tym zalogowanych: 0, gości: 1