Advertisement
Guest User

Untitled

a guest
Jul 5th, 2015
1,184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.10 KB | None | 0 0
  1. [Code]
  2. #IFNDEF Unicode
  3.   #DEFINE CharSize 1
  4. #ELSE
  5.   #DEFINE CharSize 2
  6. #ENDIF
  7.  
  8. type
  9.   TSeekOrigin = (
  10.     soBeginning,
  11.     soCurrent,
  12.     soEnd
  13.   );
  14.  
  15. #IFDEF UNICODE
  16. function BufferToAnsi(const Buffer: string): AnsiString;
  17. var
  18.   W: Word;
  19.   I: Integer;
  20. begin
  21.   SetLength(Result, Length(Buffer) * 2);
  22.   for I := 1 to Length(Buffer) do
  23.   begin
  24.     W := Ord(Buffer[I]);
  25.     Result[(I * 2)] := Chr(W shr 8); // high byte
  26.     Result[(I * 2) - 1] := Chr(Byte(W)); // low byte
  27.   end;
  28. end;
  29. #ENDIF
  30.  
  31. function ReadStringFromFile(const FileName: string; Origin: TSeekOrigin; Offset, Length: Integer;
  32.   var S: AnsiString): Boolean;
  33. var
  34.   Buffer: string;
  35.   Stream: TFileStream;
  36. begin
  37.   Result := True;
  38.   try
  39.     Stream := TFileStream.Create(FileName, fmOpenRead);
  40.     try
  41.       Stream.Seek(Offset, Ord(Origin));
  42.       SetLength(Buffer, Length div {#CharSize});
  43.       Stream.ReadBuffer(Buffer, Length);
  44.       #IFNDEF UNICODE
  45.         S := Buffer;
  46.       #ELSE
  47.         S := BufferToAnsi(Buffer);
  48.       #ENDIF
  49.     finally
  50.       Stream.Free;
  51.     end;
  52.   except
  53.     Result := False;
  54.   end;
  55. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement