Posterior a de nuestra larga compilación de información resolvimos esta cuestión que presentan muchos usuarios. Te brindamos la solución y nuestro deseo es servirte de gran ayuda.
Solución:
su código no funciona porque está leyendo el contenido del archivo usando un Unicode string como búfer, por lo que solo está moviendo bytes del búfer interno de TFileStream al Unicode string ignorando la codificación.
puede arreglar fácilmente su procedimiento, simplemente cambiando el tipo de resultado a AnsiString
function LoadFileToStr(const FileName: TFileName): AnsiString;
pero te recomendaré cuál usas TFile.ReadAllText
en cambio, la función que en una sola línea de código lee el contenido de un archivo y también maneja la codificación del archivo.
Puede lograr esto con una línea de código usando la función ReadAllText. Me gusta esto:
Uses IOUtils;
TFile.ReadAllText(FileName);
TFile.ReadAllText(FileName, s, TEncoding.ASCII) // force encoding
Detectará correctamente archivos ANSI, Unicode y binarios.
Debe tener en cuenta la codificación, por ejemplo:
function LoadFileToStr(const FileName: TFileName): String;
var
FileStream : TFileStream;
Bytes: TBytes;
begin
Result:= '';
FileStream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
if FileStream.Size>0 then begin
SetLength(Bytes, FileStream.Size);
FileStream.Read(Bytes[0], FileStream.Size);
end;
Result:= TEncoding.ASCII.GetString(Bytes);
finally
FileStream.Free;
end;
end;
//test
procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(LoadFileToStr('C:autoexec.bat'));
end;
Puedes añadir valor a nuestra información tributando tu experiencia en las interpretaciones.