为什么这样不行呢?高手请赐教
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;