Проблема SaveStringsToFile сохраняет файл с дополнительными символами

nik1967

Old Men
Проверенный
Всем привет! Столкнулся с такой бядой. Если загрузить содержимое файла в буфер функцией LoadStringsFromFile, а затем сохранить в файл функцией SaveStringsToFile, то появляются какие-то дополнительные символы и размер файла увеличивается. Не подскажет кто, что это за фигня, и как с ней бороться?
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[code]
var
   i: Integer;
   
function GetValue(strFilename,keyFind: String; var tvalue: String): String;
var
   strArr: TArrayOfString;
   position_begin: Integer;
begin
  LoadStringsFromFile(strFilename, strArr);
  for i:= 0 to GetArrayLength(strArr)-1 do begin
    position_begin:= Pos(keyFind,strArr[i]);
    if position_begin>0 then begin
      Delete(strArr[i],1,position_begin+Length(keyFind)+13);
           Delete(strArr[i],3,position_begin+Length(keyFind)+13);
           tvalue:= strArr[i];
      Result:= tvalue;
           Exit;
    end;
  end;
end;

procedure SearchReplace(FilePath, Find, Value: String);
var
   sf, sr, sv: String;
   ss: TArrayOfString;
begin
   GetValue(FilePath, Find, sv);
   LoadStringsFromFile(FilePath, ss);
   for i:=0 to GetArrayLength(ss)-1 do begin
       if Pos(find, ss[i])>0 then begin
           sf:= sv;
           sr:= Value;
           StringChange(ss[i], sf, sr);
           SaveStringsToFile(FilePath, ss, false);
           Exit;
       end;
   end;
end;

function InitializeSetup: Boolean;
var
   Path: String;
begin
   Path:= ExpandConstant('{src}')+'\PlayerPreferences.sav';
   SearchReplace(Path,'StrProperty','ru');
   MsgBox('Готово!', mbInformation, MB_OK);
end;

И ещё несколько символов и 2 лишних символа в конце.
 

Вложения

Krinkels

Он где то тут
Администратор
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[code]
function InitializeSetup: Boolean;
var
  UnicodeStr: string;
  ANSIStr: AnsiString;
  Len: Integer;
  Rp: String;
begin
    LoadStringFromFile(ExpandConstant('{src}\PlayerPreferences.sav'), ANSIStr);
    UnicodeStr := String(ANSIStr);
  
    // Ищем StrProperty.
    Len := Pos( 'StrProperty', UnicodeStr );
  
    // смещаемся в тексте из расчета "размер StrProperty( 11 символов )" + 14 служебных байт  
    Len := Len + 25;
  
    SetLength( Rp, 2 );      
    Rp[ 1 ] := UnicodeStr[ Len ];
    Rp[ 2 ] := UnicodeStr[ Len + 1 ];  
    // В Rp будет текущая локализация
  
    StringChangeEx(UnicodeStr, Rp, 'ru', False);  
    SaveStringToFile(ExpandConstant('{src}\PlayerPreferences.sav'), AnsiString(UnicodeStr), false);
end;
За основу был взят пример @Shegorat
 
Сверху