RAD Studio VCL Reference
|
Reads up to Count bytes of data from the resource associated with the handle stream into Buffer.
function Read(var Buffer; Count: Longint): Longint; override;
virtual __fastcall Longint Read( Buffer, Longint Count);
Use Read to read data from the resource associated with the handle stream when the number of bytes in the file is not known. Read transfers up to Count bytes from the resource, starting at the current position, and then advances the current position in the resource by the number of bytes actually transferred. Read returns the number of bytes actually transferred, which may be less than Count if the end of file marker is encountered.
All other data-reading methods of a handle stream (ReadBuffer, ReadComponent) call Read to do the actual reading.
Delphi Examples:
{ This example determines the encoding of a source file and then writes the file in any encoding chosen. Use this project to create files of any encoding. This example requires two text edits and a combobox. } procedure TForm1.Button1Click(Sender: TObject); var LBuffer: TBytes; LByteOrderMark: TBytes; LOffset: Integer; LEncoding, DestEncoding: TEncoding; LFileStream: TFileStream; EncodingArray: array[0..5] of TEncoding; begin LEncoding:= nil; EncodingArray[0]:= TEncoding.UTF8; EncodingArray[1]:= TEncoding.UTF7; EncodingArray[2]:= TEncoding.Unicode; EncodingArray[3]:= TEncoding.Default; EncodingArray[4]:= TEncoding.BigEndianUnicode; EncodingArray[5]:= TEncoding.ASCII; DestEncoding := EncodingArray[ComboBox1.ItemIndex]; LFileStream := TFileStream.Create(Edit1.Text, fmOpenRead); try // Read file into buffer SetLength(LBuffer, LFileStream.Size); // LFileStream.Read(LBuffer[0], Length(LBuffer)); LFileStream.ReadBuffer(Pointer(LBuffer)^, Length(LBuffer)); // Identify encoding and convert buffer to UTF8 LOffset := TEncoding.GetBufferEncoding(LBuffer, LEncoding); // for I := 0 to Length(LBuffer) - 1 do // Memo1.Lines.Add((LBuffer[I])); LBuffer := LEncoding.Convert(LEncoding, DestEncoding, LBuffer, LOffset, Length(LBuffer) - LOffset); finally LFileStream.Free; end; LFileStream := TFileStream.Create(Edit2.Text, fmCreate); try // Write an encoding byte order mark and buffer to output file LByteOrderMark := DestEncoding.GetPreamble; LFileStream.Write(LByteOrderMark[0], Length(LByteOrderMark)); LFileStream.Write(LBuffer[0], Length(LBuffer)); finally LFileStream.Free; end; end; procedure TForm1.FormCreate(Sender: TObject); var StringList: TStrings; begin StringList := TStringList.Create; try with StringList do begin Add('TEncoding.UTF8'); Add('TEncoding.UTF7'); Add('TEncoding.Unicode'); Add('TEncoding.Default'); Add('TEncoding.BigEndianUnicode'); Add('TEncoding.ASCII'); end; with ComboBox1 do begin Items.Assign(StringList); ItemIndex := 0; end; finally StringList.free; end; end;
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|