1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| function xxxLoadFromFile(const AFileName: string): string;
var
VFileStream: TFileStream;
VSize: Integer;
VPreamble: TBytes;
VPreambleSize: Integer;
VEncoding: TEncoding;
VMemStream: TBytesStream;
begin
if not FileExists(AFileName) then
Exit('');
VFileStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite) ;
try
SetLength(VPreamble, 4); // 2 pour UTF-16, 3 pour UTF-8 et 4 pour UTF-32
VPreambleSize := VFileStream.Read(VPreamble, 4);
if VPreambleSize >= 2 then
begin
VEncoding := nil;
VPreambleSize := TEncoding.GetBufferEncoding(Copy(VPreamble, 0, VPreambleSize), VEncoding, TEncoding.ANSI);
VSize := VFileStream.Size - VPreambleSize;
end
else
begin
VEncoding := TEncoding.ANSI;
VPreambleSize := 0;
VSize := VFileStream.Size;
end;
VFileStream.Seek(VPreambleSize, soBeginning);
VMemStream := TBytesStream.Create();
try
VMemStream.CopyFrom(VFileStream, VSize);
Result := VEncoding.GetString(VMemStream.Bytes, 0, VSize);
finally
VMemStream.Free();
end;
finally
VFileStream.Free;
end;
end ;
procedure xxxSaveToFile(const AFileName: string; const AContent: string; AEncoding: TEncoding = nil);
var
VFileStream: TFileStream;
VPreamble: TBytes;
VMemStream: TStringStream;
begin
if AEncoding = nil then
AEncoding := TEncoding.UTF8;
VFileStream := TFileStream.Create(AFileName, fmCreate) ;
try
VPreamble := AEncoding.GetPreamble();
VFileStream.Write(VPreamble[0], Length(VPreamble));
VMemStream := TStringStream.Create(AContent, AEncoding);
try
VFileStream.Write(VMemStream.Bytes[0], VMemStream.Size);
finally
VMemStream.Free();
end;
finally
VFileStream.Free();
end;
end; |
Partager