我有个dat文件,里面有乱码,memo直接loadfromfile后什么都显示不了,用记事本打开dat文件后里面的内容也不能全部复制出来,我用如下代码也只能取得一行字符,之后的也取不出来。请各位帮忙
var
  Buffer: PChar;
  MemSize: Integer;
  Stream: TFileStream;
begin
  Stream := TFileStream.Create('d:\Blacklist.dat', fmOpenRead);
  try    MemSize := Stream.Size;
    Inc(MemSize);
    Buffer := AllocMem(MemSize);
    try
      Stream.Read(Buffer^, MemSize);
      memo1.SetTextBuf(Buffer);    finally
      FreeMem(Buffer, MemSize);
    end;
  finally
    Stream.Free;
  end;end;

解决方案 »

  1.   

    是否你的dat加密了?,他执行正常么?想不明白
      

  2.   

    这dat不是个什么播放文件,就是个普通记录信息的文件,只不过里面有乱码
      

  3.   

    File of Record类型的文件
    可惜,你不知它的Record是如何定义的
      

  4.   

    http://rabbitfox.blog.sohu.com/29948084.html供参考。如果知道它的type
      X = record
       //这里是如何定义的
      end;就OK了
      

  5.   

    type
      TMember = record
        filename: string[255];
        hpzl: string[255];
        cd: string[255];
        hphm: string[255];
        wfsj: string[255];
        cs: string[255];
        xs: string[255];
      end;
    我知道那是如何定义的,关键是我执行到Read(f, aMember);就报I/O错误
      

  6.   

    01N20070701013843609S2-1.jpg            01                  N2   冀G51806            2007-07-01 01:38:43:703       77.6         2    50    1                                01N20070701013950296S2-1.jpg            01                  N2   蒙A16271            2007-07-01 01:39:50:390       70.5  10.6  2    50    1                                01S20070701013955578S1-1.jpg            01                  S1   蒙A26403            2007-07-01 01:39:55:656       61.5  10.7  2    50    1                                01S20070701014019062S1-1.jpg            01                  S1   蒙A28900            2007-07-01 01:40:19:140       53.9  13.1  2    50    1                                01N20070701014033390S2-1.jpg            01                  N2   冀G33478            2007-07-01 01:40:33:484       54.1  8.6   2    50    1       这是我用notepad复制出来的
      

  7.   

    你不妨这样写试试:var
      Stream: TFileStream;
    begin
      Stream := TFileStream.Create('d:\Blacklist.dat', fmOpenRead);
      Stream.Position:=0;
      memo1.Lines.LoadFromStream(Stream);
      Stream.Free;
    end;
      

  8.   

    里面可能有#0 符号 memo 遇到这个就认识结束了吧,用流试一下,不过也不一定能显示全,里面会有不可见字符的,估计
      

  9.   

    网上找的程序,不知道对你有没有帮助var
      MyFile: File of Tmember;
      Mymembers: Tmember;
    begin
      Memo2.Clear;
      AssignFile(MyFile, GetSysPath+'MyBin.dat');
      Reset(MyFile);
      try
        while not Eof(MyFile) do
        begin
          read(MyFile, Mymembers);
          Memo2.Lines.Add(Mymembers.FileName);
        //....
        end;
      finally
        CloseFile(MyFile);
      end;
    end;