首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-02-05 
为什么这样不行呢?高手请赐教procedureTForm1.Button1Click(Sender:TObject)varDestinyStream:TFileStrea

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

热点排行