Stream.Free;
Label1.Caption :=
TimeToStr(EncodeTime(Rec.Hour, Rec.Minute, Rec.Second, Rec.MSec));
Label2.Caption := Rec.Msg; { * }
end;
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ RecordRead ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ Π·Π°ΠΏΠΈΡΡ TMethod1Record, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΠΎΠΏΡΡΠ΅Π½ΠΎ.
ΠΠ°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ Π² ΡΡΡΠΎΠΊΠ΅, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ Π·Π²Π΅Π·Π΄ΠΎΡΠΊΠΎΠΉ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Access violation (Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π±ΡΡΡ, Π½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΌΡΡΠΎΡ). ΠΡΠΈΡΠΈΠ½Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΡΠΆΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅ β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Msg, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° RecordWrite, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ RecordRead, Π° ΡΠ°ΠΌΠ° ΡΡΡΠΎΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π½Π΅ Π±ΡΠ»Π°. ΠΠ΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ ΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ nil, ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠΌΡΡΠ» Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ . ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΡΠΎΠΊ, ΡΠΌΠ΅ΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΈΠΌΠ΅Π΅Ρ Π²Π΅ΡΡΠΌΠ° ΡΠΎΠΌΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π½Π½ΠΎΡΡΡ Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ.
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΡβ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠΏ ΠΏΠΎΠ»Ρ Msg Π½Π° ShortString. ΠΠΎΠ»ΡΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΠ΅Π½ΡΡΡ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ShortString ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° 255 ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. ΠΠΎ-Π²ΡΠΎΡΡΡ , Π΅ΡΠ»ΠΈ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ, ΡΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡΡ, ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π½Π΅Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ. ΠΡΠ»ΠΈ ΡΡΠ΅Π΄Π½ΡΡ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ, ΡΠΎ ΡΠ°ΠΊΠΈΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΡΡΠΊΠΎΠ² Π² ΠΏΠΎΡΠΎΠΊΠ΅ Π±ΡΠ΄Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ.Π΅. ΡΠ°ΠΉΠ» ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΠΎΠΏΡΠ°Π²Π΄Π°Π½Π½ΠΎ ΡΠ°Π·Π΄ΡΡΡΠΌ. ΠΡΠΎ Π²ΡΠ΅Π³Π΄Π° ΠΏΠ»ΠΎΡ ΠΎ, Π° Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ β Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ShortString ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ²Π΅ΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΡΠΎΠΊΠΈ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π΄Π»ΠΈΠ½Ρ (Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ShortString ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ ΠΌΠ΅Π½ΡΡΠΈΠΌ, ΡΠ΅ΠΌ 255, ΡΠΈΡΠ»ΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² β Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ°).
Π‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΡΠΈΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΡΠΎΡΡΡΡ: Π΅ΡΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π² Π·Π°ΠΏΠΈΡΠΈ ShortString ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΠΈΠΏΠ° Char, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ Π±ΠΎΠ»ΡΡΠ΅ΠΉ, ΡΠ΅ΠΌ 255 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π΄Π»ΠΈΠ½Ρ. ΠΡΠΎΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ±.
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ RecordWrite ΡΡΠΎΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ΄ (Π»ΠΈΡΡΠΈΠ½Π³ 3.37).
ΠΠΈΡΡΠΈΠ½Π³ 3.37. ΠΠ°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» ΡΡΡΡΠΊΡΡΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²const
MsgLen = 15;
type
TMethod2Record = packed record
Hour: Word;
Minute: Word;
Second: Word;
MSec: Word;
Msg: array[0..MsgLen - 1] of Char;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
RΠ΅Ρ: TMethod2Record;
Stream: TFileStream;
begin
DecodeTime(Now, Rec.Hour, Rec.Minute, RΠ΅Ρ.Second, Rec.MSec);
StrPLCopy(Rec.Msg, Edit1.Text, MsgLen - 1);
Stream := TFileStream.Create('Method2.stm', fmCreate);
Stream.WriteBuffer(Rec, SizeOf(Rec));
Stream.Free;
end;
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ RecordRead ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ (Π»ΠΈΡΡΠΈΠ½Π³ 3.38).
ΠΠΈΡΡΠΈΠ½Π³ 3.38. Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΡΡΡΡΠΊΡΡΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²procedure TForm1.Button2Click(Sender: TObject);
var
RΠ΅Ρ: TMethod2Record;
Stream: TFileStream;
begin
Stream := TFileStream.Create('Method2.stm', fmOpenRead);
Stream.ReadBuffer(Rec, SizeOf(Rec));
Stream.Free;
Label1.Caption :=
TimeToStr(EncodeTime(Rec.Hour, Rec.Minute, Rec.Second, Rec.MSec));
Label2.Caption := Rec.Msg;
end;
ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° MsgLen Π·Π°Π΄Π°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ (Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΌ Π½ΡΠ»ΡΠΌ) Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΠ½Π° Π²Π·ΡΡΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ, ΡΡΠΎΠ±Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ. ΠΠ΅ΡΠ΅Π΄Π΅Π»ΠΊΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Ρ: ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Edit1.Text Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ StrPLCopy. Π ΠΊΠΎΠ΄Π΅ RecordRead ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°ΠΌΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ) Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Ρ β ΡΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π·Π° ΡΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² Char ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ Ρ PChar, Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° PChar ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΠΈΠΏΠ° AnsiString β ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΌΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ ΡΠ΅ΡΠΈΠ»ΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΌΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° Π½Π΅ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ: Ρ ΠΎΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ, Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ½Π΅ΡΡΠΈ ΡΡΡΠΎΠΊΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄Π»ΠΈΠ½ΠΎΠΉ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΈΡΠ°Π»Π°ΡΡ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ, Π·Π°ΡΠ΅ΠΌ Π²ΡΠ΄Π΅Π»ΡΠ»Π°ΡΡ Π΄Π»Ρ Π½Π΅Ρ ΠΏΠ°ΠΌΡΡΡ, ΠΈ Π² ΡΡΡ ΠΏΠ°ΠΌΡΡΡ ΡΠΈΡΠ°Π»Π°ΡΡ ΡΡΡΠΎΠΊΠ°. ΠΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠ΅ΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄. Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Record Write ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ (Π»ΠΈΡΡΠΈΠ½Π³ 3.39)
ΠΠΈΡΡΠΈΠ½Π³ 3.39. ΠΠ°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» ΡΡΡΠΎΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ ΡΡΡΡΠΊΡΡΡΡtype
TMethod3Record = packed record
Hour: Word;
Minute: Word;
Second: Word;
MSec: Word;
end;
procedure TForm1.Butrton3Click(Sender: TObject);
var
Rec: TMethod3Record;
Stream: TFileStream;
Msg: string;
MsgLen: Integer;
begin
DecodeTime(Now, Rec.Hour, Rec.Minute, Rec.Second, Rec.MSec);
Msg := Edit1.Text;
MsgLen := Length(Msg);
Stream := TFileStream.Create('Method3.stm', fmCreate);
Stream.WriteBuffer(Rec, SizeOf(Rec));
Stream.WriteBuffer(MsgLen, SizeOf(MsgLen);
if MsgLen > 0 then Stream.WriteBuffer(Pointer(Msg)^, MsgLen);
Stream.Free;
end;
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ RecordRead ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ (Π»ΠΈΡΡΠΈΠ½Π³ 3.40).
ΠΠΈΡΡΠΈΠ½Π³ 3.40. Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΡΡΡΠΎΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ ΡΡΡΡΠΊΡΡΡΡprocedure TForm1.Button3Click(Sender: TObject);
var
Rec: TMethod3Record;
Stream: TFileStream;
Msg: string; MsgLen:
Integer;
begin
Stream := TFileStream.Create('Method3.stm', fmOpenRead);
Stream.ReadBuffer(Rec, SizeOf(Rec));
Stream.ReadBuffer(MsgLen, SizeOf(Integer));
SetLength(Msg, MsgLen);
if MsgLen > 0 then Stream.ReadBuffer(Pointer(Msg)^, MsgLen);
Stream.Free;
Label1.Caption :=
TimeToStr(EncodeTime(Rec.Hour, Rec.Minute, Rec.Second, Rec.MSec));
Label2.Caption := Msg;
end;
ΠΠ°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π΅Π·ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΡΡΠΎΠΊΡ, Π½Π΅ ΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π΄Π»ΠΈΠ½Ρ (ΠΊΡΠΎΠΌΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π΄Π»ΠΈΠ½Ρ AnsiString) ΠΈ Π½Π΅ ΡΠ°ΡΡ ΠΎΠ΄ΡΡ ΠΏΠΎΠ½Π°ΠΏΡΠ°ΡΠ½Ρ ΠΏΠ°ΠΌΡΡΡ. ΠΡΠ°Π²Π΄Π°, ΡΠ°ΠΌ ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΈΠ· Π·Π°ΠΏΠΈΡΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΎ ΠΏΠΎΠ»Π΅ ΡΠΈΠΏΠ° string, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΠΈΡΠ°ΡΡ Π² ΠΏΠΎΡΠΎΠΊ. ΠΠΎ-Π²ΡΠΎΡΡΡ , Π² ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ. Π-ΡΡΠ΅ΡΡΠΈΡ , Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΌΠ° ΡΡΡΠΎΠΊΠ°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ReadBuffer ΠΈ WriteBuffer Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ ΡΡΡΠΎΠΊΠΈ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. ΠΠ΅ΡΠΎΠ΄ WriteBuffer ΠΏΠΈΡΠ΅Ρ Π² ΠΏΠΎΡΠΎΠΊ ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ ΡΠ°ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Msg, ΡΠΎ Π·Π°ΠΏΠΈΡΠ°Π»Π°ΡΡ Π±Ρ ΡΠ° ΡΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Ρ.Π΅. ΡΠ°ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. Π Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ^. ΠΠΎ ΠΏΡΠΎΡΡΠΎ Π²Π·ΡΡΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Msg Π½Π΅Π»ΡΠ·Ρ β Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΎΠ½Π° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ Π΅Π΅ ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ (Π·Π΄Π΅ΡΡ ΠΏΠΎΠ΄ΠΎΡΠ΅Π» Π±Ρ Π»ΡΠ±ΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ). Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΈ ΠΊ ReadBuffer: ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π»ΠΈΡΡ Π½Π΅ ΡΡΠ΄Π°, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ, Π° ΡΡΠ΄Π°, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ°ΠΌΠ° ΡΡΡΠΎΠΊΠ°, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠ±Π΅Π³Π½ΡΡΡ ΠΊ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ. Π ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠΈΡΠ°ΡΡ ΡΡΡΠΎΠΊΡ, Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π½Π΅Π΅ ΠΏΠ°ΠΌΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ SetLength.
ΠΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π΅Π³ΠΎ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ:
Stream.ReadBuffer(Msg[1], MsgLen);
ΠΈ
Stream.WriteBuffer(Msg[1], MsgLen);
ΠΡΠΎ Π΄Π°Π΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ: Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΡΡΠΎΠΊΠΈ, Ρ.Π΅. Ρ ΡΠΎΠΉ, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ°ΠΌΠ° ΡΡΡΠΎΠΊΠ°. ΠΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅Π½ ΠΈΠ·-Π·Π° Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° UniqueString. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈ ΡΠ°ΠΊ Π·Π°ΡΠΈΡΠ΅Π½Ρ ΠΎΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΡΡΠ³ΠΈΡ ΡΡΡΠΎΠΊ (ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ ΡΡΡΠΎΠΊΠ° Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΎΠ½Π° ΠΈ ΡΠ°ΠΊ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Π° β ΡΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ SetLength), ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· ΡΡΠΎΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠ·Π»ΠΈΡΠ½Π΅ΠΉ ΠΎΠΏΠ΅ΠΊΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ MsgLen Π½Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° ΠΏΠΎΠ»Π΅ΠΌ Π·Π°ΠΏΠΈΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ReadBuffer ΠΈ WriteBuffer.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΡΠ²Π°ΡΡ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ Π·Π°ΠΏΠΈΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎ Π½Π΅ ΡΠΎΡΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π·Π°ΠΏΠΈΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΠΏΠΎΡΠΎΠΊ, ΠΈ Π΅ΡΠ»ΠΈ Π²Π·ΡΡΡ ΠΈ Π²ΡΠΊΠΈΠ½ΡΡΡ ΠΈΠ· Π½Π΅Π΅ ΡΡΡΠΎΠΊΠΈ, ΡΠΎ Π²ΡΠ΅ ΠΏΡΠΎΡΠΈΠ΅ ΡΡΠ°ΡΡΠΊΠΈ ΠΊΠΎΠ΄Π° ΡΡΠ°Π½ΡΡ Π±ΠΎΠ»Π΅Π΅ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π·Π°ΠΏΠΈΡΡ Π½Π΅ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅, Π° ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΠΎΠ»ΡΠΌ.