Hola.
Con respecto a ese código no sé ya que hay muchos factores involucrados que pueden estar provocando el fallo.
Pero para que realizes la prueba, te pongo un procedimiento que llama a la función
TomarNombre utilizando un
TOpenDialog y realiza correctamente lo que buscabas.
Código Delphi
[-]
...
implementation
uses StrUtils;
procedure TomarNombre(Nombre: string; var Nuevo: string);
var
Num: Integer;
Ext: string;
begin
if FileExists(Nombre) then
begin
Ext := ExtractFileExt(Nombre);
Nombre := LeftStr(Nombre, Length(Nombre) - Length(Ext));
if Pos('(', Nombre) = 0 then
begin
Num := 1;
Nombre := Nombre + '(' + IntToStr(Num) + ')' + Ext;
end
else
begin
Num := StrToInt(Copy(Nombre, Pos('(', Nombre)+1,
PosEx(')',Nombre, Pos('(', Nombre))-Pos('(', Nombre)-1));
Inc(Num);
Nombre := Copy(Nombre,1,Pos('(', Nombre)-1)+'('+IntToStr(Num)+')' + Ext;
end;
if FileExists(Nombre) then
TomarNombre(Nombre, Nombre);
end;
Nuevo:= Nombre;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Ori, Des: TMemoryStream;
i: Integer;
b: Byte;
Nombre: string;
begin
if OpenDialog1.Execute then
begin
Ori:= TMemoryStream.Create;
Des:= TMemoryStream.Create;
try
Ori.LoadFromFile(OpenDialog1.FileName);
TomarNombre(OpenDialog1.FileName, Nombre);
for i:= 0 to Ori.Size - 1 do
begin
Ori.Read(b, 1);
Des.Write(b, 1)
end;
Des.SaveToFile(Nombre)
finally
Ori.Free;
Des.Free
end;
end;
end;
end.
Un saludo.