unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
type
TExe_Data_Record =record
Hex:PChar;
end;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
Exe_Data_Record:TExe_Data_Record;
Exe_Data_Record_MS:TMemoryStream;
begin
Memo1.Clear;
Exe_Data_Record_MS := TMemoryStream.Create;
Exe_Data_Record_MS.LoadFromFile('c:\eabesour.dat');
Exe_Data_Record_MS.Position := 0;
while Exe_Data_Record_MS.Position < Exe_Data_Record_MS.Size do
begin
Exe_Data_Record_MS.Read(Exe_Data_Record, SizeOf(Exe_Data_Record));
Memo1.Lines.Add(Exe_Data_Record.hex);
end;
Exe_Data_Record_MS.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
Exe_Data_Record:TExe_Data_Record;
Exe_Data_Record_MS:TMemoryStream;
begin
Exe_Data_Record_MS := TMemoryStream.Create;
Exe_Data_Record_MS.Position := 0;
Exe_Data_Record.Hex:='windows xp';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record.Hex:='windows 2000';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record.Hex:='windows me';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record.Hex:='windows 7';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record.Hex:='windows server professional';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record_MS.SaveToFile('c:\eabesour.dat');
Exe_Data_Record_MS.Free;
end;end.写入和读取这两个过程写到同一个程序就可以正常读取,但要是把读取过程写到其它程序,或是程序发生变动,那么读出的都是乱码,但是我的格式都是对的啊,不知道问题出在哪?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
type
TExe_Data_Record =record
Hex:PChar;
end;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
Exe_Data_Record:TExe_Data_Record;
Exe_Data_Record_MS:TMemoryStream;
begin
Memo1.Clear;
Exe_Data_Record_MS := TMemoryStream.Create;
Exe_Data_Record_MS.LoadFromFile('c:\eabesour.dat');
Exe_Data_Record_MS.Position := 0;
while Exe_Data_Record_MS.Position < Exe_Data_Record_MS.Size do
begin
Exe_Data_Record_MS.Read(Exe_Data_Record, SizeOf(Exe_Data_Record));
Memo1.Lines.Add(Exe_Data_Record.hex);
end;
Exe_Data_Record_MS.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
Exe_Data_Record:TExe_Data_Record;
Exe_Data_Record_MS:TMemoryStream;
begin
Exe_Data_Record_MS := TMemoryStream.Create;
Exe_Data_Record_MS.Position := 0;
Exe_Data_Record.Hex:='windows xp';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record.Hex:='windows 2000';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record.Hex:='windows me';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record.Hex:='windows 7';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record.Hex:='windows server professional';
Exe_Data_Record_MS.Write(Exe_Data_Record,SizeOf(Exe_Data_Record));
Exe_Data_Record_MS.SaveToFile('c:\eabesour.dat');
Exe_Data_Record_MS.Free;
end;end.写入和读取这两个过程写到同一个程序就可以正常读取,但要是把读取过程写到其它程序,或是程序发生变动,那么读出的都是乱码,但是我的格式都是对的啊,不知道问题出在哪?
nLen: Integer;S := 'windows xp';nLen := Length(S);
stream.Write(nLen, SizeOf(nLen));
stream.Write(PChar(S)^, Length(S));读出来时先读长度,开辟足够的缓冲区然后读:stream.Read(nLen, SizeOf(nLen));
SetLength(S, nLen);
stream.Read(PChar(S)^, Length(S));