void __fastcall renameSections( AnsiString aIniName, AnsiString aPrefix, int aFirstIndex ){
// Весь файл целиком
std::auto_ptr<TStringList> file( new TStringList() );
// Читаем файл
file->LoadFromFile( aIniName );
// Переименовываем секции
for( int i = 0; i < file->Count; i++ ){
AnsiString line = file->Strings.Trim();
if( !line.IsEmpty() && line[1] == '[' && line[line.Length()] == ']' ){
// Найдено очередное имя секции, переименовываем
file->Strings = "[" + aPrefix + IntToStr( aFirstIndex++ ) + "]";
}
}
// Сохраняем файл
file->SaveToFile( aIniName );
}
ini
[Voice:1]
0=1
1=2
[Voice:2]
0=1
1=2
2=3
[Voice:3]
0=1
1=2
и т.д.
Программа удалила секцию номер 2. Ini стал выглядить так:
[Voice:1]
0=1
1=2
[Voice:3]
0=1
1=2
Как пробежаться по ini и поменять цифры в секции, чтобы стало по порядку:
[Voice:1]
0=1
1=2
[Voice:2] //тут поменялась цифра, теперь правильно
0=1
1=2
потом делаешь ReadSections снова в TStrings (sectionsCurrent) и копируешь все данные из каждой секции (по индексу) в секцию под именем из sectionsOrdered с тем же индексом (всё это в новый файл можно, а потом файл подменить)...
первое что пришло в голову.
Код:
renameSections( [COLOR=darkblue]"file.ini"[/COLOR], [COLOR=darkblue]"Voice:"[/COLOR], [COLOR=blue]1[/COLOR] );
только там ошибочка - надо в line[line.Length()] -1 добавить )
Вроде нормально работает. Точно надо минус один?