将一字符串用filestream.write方法写入一文件
用filestream.read方法从文件读入一字符串中,结果不对,这是怎么回事?
//将一字符串存入文件 将26个字母写入一文件,这个过程正常
procedure TForm1.Button1Click(Sender: TObject);   
var
  a:TFileStream;
  Str:String;
begin
  Str:='abcdefghijklmnopqrstuvwxyz';
  a:=TFileStream.Create('001',fmCreate);
  a.Write(Str,Length(Str));
  a.Free;
end;//将一文件里的内容读入字符串    这个过程结果不对
procedure TForm1.Button2Click(Sender: TObject);
var
  a:TFileStream;
  Str,tmp:String;
  i:Integer;
begin
  a:=TFileStream.Create('001',fmOpenRead);
  a.Position:=0;
  while true do
  begin
    setLength(tmp,11);     //设置tmp的大小
    a.Read(tmp[1],10);     //考虑到可能会读入大文件,进行分段读取,一次读取10个字符
    Str:=Str+tmp;           //保存进Str
    if a.Position>=a.Size then break;   //如果到文件结尾了,则退出
  end;
  a.Free;
  ShowMessage(Str);         //Str的结果不对,是乱码,而不是26个字母
end;

解决方案 »

  1.   

    写流错了:
    procedure TForm1.Button1Click(Sender: TObject);    
    var 
      a:TFileStream; 
      Str:String; 
    begin 
      Str:='abcdefghijklmnopqrstuvwxyz'; 
      a:=TFileStream.Create('001',fmCreate); 
      a.Write(Str[1],Length(Str));///*** 
      a.Free; 
    end
    读,你的代码可能也行,不过一般的不象你这样作的procedure TForm1.Button2Click(Sender: TObject); 
    var 
      a:TFileStream; 
      Str,tmp:String; 
      i, iReaded:Integer; 
    begin 
      a:=TFileStream.Create('001',fmOpenRead); 
      a.Position:=0; 
      setLength(tmp,11);     //设置tmp的大小 
      while true do 
      begin 
        //setLength(tmp,11);     //****有不着每次都设置吧??
        iReaded := a.Read(tmp[1],10);     //考虑到可能会读入大文件,进行分段读取,一次读取10个字符 
        ///Str:=Str+tmp;           //保存进Str 
        ///if a.Position>=a.Size then break;   //如果到文件结尾了,则退出 
        Str := Str + Copy(tmp, 1, iReaded);
       if iReaded < 10 then 
         Break;//如果读取不足以缓冲的大小,那说明已经读完了  
      end; 
      a.Free; 
      ShowMessage(Str);         //Str的结果不对,是乱码,而不是26个字母 
    end;