[DELPHI]zmiana sekcji w pliku INI

0

Witam w jaki prosty sposób zmienić sekcję w pliku ini ? Np

[A]
klucz=costam

i tą sekcję [A] zmienić np na [B] bez usuwania zawartości sekcji [A]. Jeden sposób jak jest to utworzenie nowej sekcji [B] i skopiowanie całej zawartości z sekcji [A] do sekcji [B] chyba najprostszy sposób ale czy jest możliwość zmiany samej nazwy sekcji ?

0

Wątpie czy klasa TIniFile albo funkcje WinAPI do obslugi plików ini na
to pozwalają, ale jeżeli piszesz pod VCL - to najprościej zrobić można
chyba tak (a przynajmniej na to wpadłem w pierwszej chwili, czytając
Twoje pytanie). Wczytać plik ini do TStringList, wyszukać wiersz [A] i
go zamienić na [B], potem zapisać zmieniony plik ini, więc może tak?

0

Można jak pisze sam autor, można jak pisze olesio a można sobie napisać taką funkcję.

function ChangeINISectionName(FileName, OldSectionName, NewSectionName: string): Boolean;
const
  BUFF_SIZE = 10485760; //maksymalny rozmiar sekcji (10 KB powinny wystarczyc)
var
  Buffer: PChar;
begin
  GetMem(Buffer, BUFF_SIZE);
  try
  result:= Boolean(GetPrivateProfileSection(PChar(OldSectionName), Buffer, BUFF_SIZE,
     PChar(FileName)));
  if (result = false) then
    raise EAbort.Create('nie ma co robic skoro nic nie przeczytano');
  result:= Boolean(WritePrivateProfileSection(PChar(NewSectionName), Buffer,
    PChar(FileName)));
  if (result = false) then
    raise EAbort.Create('jak sie nie uda zapisac nowej to nie usuwac poprzedniej');
  result:= Boolean(WritePrivateProfileSection(PChar(OldSectionName), nil,
    PChar(FileName)));
  finally
  FreeMem(Buffer);
  end;
end;

//przyklad uzycia funkcji
begin
  ChangeINISectionName('d:\test.ini', '1', '2');
end;

Moja funkcja odczytuję całą sekcję, zapisuje ją pod nową nazwą i usuwa poprzednią sekcję (czyli to w sumie rozwiązanie autora tyle, że bezpośrednio korzysta z WinApi). .

0

Wielkie dzięki !! o to mi chodziło

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