读书人

为什么这样不行呢?高手请赐教解决方案

发布时间: 2012-02-05 12:07:15 作者: rapoo

为什么这样不行呢?高手请赐教
procedure TForm1.Button1Click(Sender: TObject);
var
DestinyStream: TFileStream;
a: String;
begin
edit1.text := 'abcdefghijklmn0p ';
a := 'abcdefghijklmn0p ';

a:= edit1.text; //如果不用这句就行,用了就不行驶 高手请赐教

DestinyStream := TFileStream.Create( 'a.ini ', fmCreate);
try
DestinyStream.Write(a, 16);
finally
DestinyStream.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
DestinyStream: TFileStream;
b: String;
begin
setlength(b, 16);

DestinyStream := TFileStream.Create( 'a.ini ', fmOpenRead);
try
DestinyStream.Seek(-16, soFromEnd);
DestinyStream.ReadBuffer(b, Sizeof(b));
showmessage(b);
finally
DestinyStream.Free;
end;
end;

[解决办法]
procedure TForm1.Button1Click(Sender: TObject);
var
DestinyStream: TFileStream;
a: String;
begin
edit1.text := 'abcdefghijklmn0p ';
a := 'abcdefghijklmn0p ';

a:= edit1.text; //如果不用这句就行,用了就不行驶 高手请赐教

DestinyStream := TFileStream.Create( 'a.ini ', fmCreate);
try
DestinyStream.Write(a, 16);
finally
DestinyStream.Free;
end;
end;

a := 'abcdefghijklmn0p ';
将A初始长度分配了16个字符
a:= edit1.text; 又重新分配了长度,如果分配长度不够16个字符会导致DestinyStream.Write(a, 16);出错。因为超出了正常的访问地址。
不过DestinyStream.Write(a, 16);这样写好象会有问题,a的字符内容是从a[1]开始的
所以应该是DestinyStream.Write(a[1], 16);


[解决办法]
var
DestinyStream: TFileStream;
buffer:Array of Char;
a: String;
begin

a := 'abcdefghijklmn0p ';
setlength(buffer,length(a));
strpcopy(@buffer[0],a);


DestinyStream := TFileStream.Create( 'c:\a.ini ', fmCreate);
try
DestinyStream.Position:=0;
DestinyStream.Write(buffer, length(buffer));
finally
DestinyStream.Free;
end;
end;


代码给你贴出来.

[解决办法]
procedure TForm1.Button1Click(Sender: TObject);
var
DestinyStream: TFileStream;
a: String;
begin
edit1.text := 'abcdefghijklmn0p ';
a := 'abcdefghijklmn0p ';

a:= edit1.text; //如果不用这句就行,用了就不行驶 高手请赐教

DestinyStream := TFileStream.Create( 'a.ini ', fmCreate);
try
DestinyStream.Write(PChar(a)^, 16);
finally
DestinyStream.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
DestinyStream: TFileStream;
b: String;
begin
setlength(b, 16);

DestinyStream := TFileStream.Create( 'a.ini ', fmOpenRead);
try
DestinyStream.Seek(-16, soFromEnd);
DestinyStream.ReadBuffer(PChar(b)^, Length(b));
showmessage(b);
finally


DestinyStream.Free;
end;
end;

读书人网 >.NET

热点推荐