那些怪字符的文件是怎么写出来?我用TFileStream写文件,但写的不是怪字符,改了一下,能写怪字符了,但读不出来,大家帮我看看:
写文件:
procedure TForm1.Button1Click(Sender: TObject);
var
  n,i: Integer;
  f:TFileStream;
  str:string;
begin
  f := TFileStream.Create('000.txt',fmCreate);
  try
    for i:=0 to memo.Lines.Count-1 do
    begin
      str:=memo.Lines.Strings[i];
      n:= Length(str);
      f.Write(n,SizeOf(n));
      f.Write(str[1],n);//此句改为f.Write(str,n); 写的就是怪字符
      memo1.Lines.Add(inttostr(n)+':   '+str) ;
    end;
    n:=0;                 //文件结束标志
    f.Write(n,SizeOf(n)); //写入文件结束标志
  finally
    f.Free;
end;
end;
读文件:
procedure TForm1.Button2Click(Sender: TObject);
var
  n:Integer;
  f:TFileStream;
  str:string;
begin
    f:=TFileStream.Create('000.txt',fmOpenRead);
    try
      f.Read(n,SizeOf(n));
      f.Position:=0;
      while n<>0 do
      begin
       f.Read(n,SizeOf(n));
       SetLength(str,n);
       f.Read(str[1],n);
       memo2.Lines.Add(inttostr(n)+':   '+str) ;
      end;
    finally
      f.Free;
    end;程序如上:这样是可以写和读的,但是是可识别了。把f.Write(str[1],n);改为f.Write(str,n); 写的就是怪字符,然后把f.Read(str[1],n) 改为f.Read(str,n)后,有时只能正确的读出一行,有时一行也读不出来。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      n,i: Integer;
      f:TFileStream;
      c:array[0..10] of char;
    begin
      c:='dd暗暗暗';
      f := TFileStream.Create('000.txt',fmCreate);
      try
        f.Write(c,10);
      finally
        f.Free;
    end;
    end;
    //读文件:
    procedure TForm1.Button2Click(Sender: TObject);
    var
      n:Integer;
      f:TFileStream;
      c:array[0..10] of char;
      str:string;
    begin
        f:=TFileStream.Create('000.txt',fmOpenRead);
        try
          f.Read(c,1000);
       for n:=0 to 1000 do
          str:=str+c[n];
       memo2.Lines.Add(str) ;
       finally
         f.Free;
       end;
     end;
      

  2.   

    因为string的起始位为1,而write从0开始写,就会是乱字符了.