Ver Mensaje Individual
  #6  
Antiguo 23-07-2025
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 646
Reputación: 23
mRoman Va por buen camino
Solucionado

Hola buenos dias.

El código que me proporcionó "navbuoy" me ayudo, me orientó a como solucionarlo. El problema con ese código es que no es para la version de Delphi que estoy usando (D6), por lo tanto lo cambie y quedó de este forma:

Código Delphi [-]
procedure RemoveBOMFromFile(const FileName: string);
const
  BOM: array[0..2] of Byte = ($EF, $BB, $BF); // UTF-8 BOM
var
  FileStream: TFileStream;
  TempStream: TMemoryStream;
  Buffer: array[0..2] of Byte;
  HasBOM: Boolean;
begin
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  TempStream := TMemoryStream.Create;
  try
    // Leer primeros 3 bytes
    FileStream.ReadBuffer(Buffer, 3);
    HasBOM := (Buffer[0] = BOM[0]) and (Buffer[1] = BOM[1]) and (Buffer[2] = BOM[2]);

    if HasBOM then
    begin
      // Si tiene BOM, copiar el resto del archivo sin los primeros 3 bytes
      TempStream.CopyFrom(FileStream, FileStream.Size - 3);
    end
    else
    begin
      // Si no tiene BOM, copiar todo el archivo desde el inicio
      FileStream.Position := 0;
      TempStream.CopyFrom(FileStream, FileStream.Size);
    end;
  finally
    FileStream.Free;
  end;

  // Reescribir archivo sin BOM
  FileStream := TFileStream.Create(FileName, fmCreate);
  try
    TempStream.Position := 0;
    FileStream.CopyFrom(TempStream, TempStream.Size);
  finally
    TempStream.Free;
    FileStream.Free;
  end;
end;


Y lo mando llamar asi:
Código Delphi [-]
  FLBox.Directory:='.\';

  for x:=0 to FLBox.Count - 1 do
  begin
      RemoveBOMFromFile(FLBox.Items.Strings[x]);
  end;

Agregue un componente TFileListBox para agregar ahi los archivos que se van a procesar y tomar de ahi el nombre, que es enviado como parámetro al procedimiento "RemoveBOMFromFile".

Gracias a todos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita