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;

解决方案 »

  1.   

    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);
      

  2.   

    madyak(无天) 
    用你的方法试过了,还是会出错,请大家帮忙。
      

  3.   

    filestream类的write声明如下:
    Write(const Buffer; Count: Longint): Longint; override;
    如果你要使用的话最好别把控件的属性当缓冲区.免得出错误.我写这类的操作的时候基本上是用数组当缓冲的.
      

  4.   

    这本来就没有用控件做缓冲区啊,已经把控件赋给变量了。这代码的意思其实就是:想在EDIT上面输入一段文字写到一个文件后面,然后用别的给读出来,写都没有问题,就是读不出来,用变量a直接赋的值就OK,把EDIT赋给a然后写入的就不行,按楼上说的也试过了,能不能给个例子看看。
      

  5.   

    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;
    代码给你贴出来.
      

  6.   

    大家还是没有理解我的意思,我是想设计一个EDIT输入一些信息,然后通过流写入到一个文件里,然后又把这个信息给读出来,写入没有问题,我说出问题是后面那段,写进去的信息读不出来,如果用字符串直接写入就可以读出来,用EDIT输入的信息写入的就不行,就是要处理这个问题,不知大家理解没有?
      

  7.   

    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;
      

  8.   

    这就是我要的,解决了一大难题,非常非常谢谢。  keyz(keyz):我爱死你了。