var
  ABuffer: <Record>
  FWrite: TFileStream;
begin
  FWrite := TFileStream.Create('My.dat', FmOpenWrite);
  try
    ABuffer.ID := 1;
    StrPCopy('Hello Delphi !',ABuffer.Context);
    FWrite.Seek(0, soFromBegin);
    FWrite(ABuffer, SizeOf(<Record>));
  Finally
    FWrite.Free;
  end;
end;
//这台可以上网的机没装Delphi,难免有字词错误,对不起!
//我出现的问题是My.dat打开来是一个新内容,而没有被追加,请大侠们帮帮我

解决方案 »

  1.   

    不好意思,我打错了好多var
      ABuffer: TTestRecord;
      FWrite: TFileStream;
    begin
      FWrite := TFileStream.Create('My.dat', fmCreate);
      try
        Randomize;
        ABuffer.ID := Random(1000);
        StrPCopy(ABuffer.Context, 'Hello Delphi !');
        FWrite.Seek(0, soFromBeginning);
        FWrite.Write(ABuffer, SizeOf(TTestRecord));
      Finally
        FWrite.Free;
      end;
    end;请帮我看看是什么问题好吗?
      

  2.   

    我知道了,是这里FWrite.Seek(0, soFromBeginning); 应该是soFromEnd,对不起哈
    var 
      ABuffer: TTestRecord; 
      FWrite: TFileStream; 
    begin 
      FWrite := TFileStream.Create('My.dat', fmCreate); 
      try 
        Randomize; 
        ABuffer.ID := Random(1000); 
        StrPCopy(ABuffer.Context, 'Hello Delphi !'); 
        FWrite.Seek(0, soFromBeginning); 
        FWrite.Write(ABuffer, SizeOf(TTestRecord)); 
      Finally 
        FWrite.Free; 
      end; 
    end; 
      

  3.   

    FWrite.Seek(0, soFromEnd);

    FWrite.Position := FWrite.Size;
      

  4.   

    var
      ABuffer: TTestRecord;
      FWrite: TFileStream;
    begin
      FWrite := TFileStream.Create('My.dat', fmCreate);
      try
        Randomize;
        ABuffer.ID := Random(1000);
        StrPCopy(ABuffer.Context, 'Hello Delphi !');
        FWrite.Positon := FWrite.Size;
        FWrite.Write(ABuffer, SizeOf(TTestRecord));
      Finally
        FWrite.Free;
      end;
    end;
      

  5.   

    对于FileStream,能够使用Seek的时候尽可能养成使用Seek的习惯,否则,如果一个文件是在增长的,而如果Size有所缓存,则可能导致的后果是取错了。并且Size也是通过Seek取得的,Position也是通过Seek改变的,所以没有必要做两次操作。