下面这段代码为什么会报错:
var
  iFileHandle: Integer;
  iFileLength: Integer;
  iBytesRead: Integer;
  Buffer:pChar;
  i: Integer;
begin
  if OpenDialog1.Execute then
  begin
    try
      iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(AllocMem(iFileLength + 1));
      iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
      FileClose(iFileHandle);      memo1.Lines.Clear;
      memo1.Lines.Add(buffer); //这一句报了一个异常
    finally
      FreeMem(Buffer);
    end;
  end;
end;那位大虾解决一下吧,感激不尽。

解决方案 »

  1.   

    你用的Buffer是PCHAR型的,而出错的地方是要STRING型,你用String(Buffer)试一下看看!!-----------------------------------------------------------------
    我是中国鹰派!
    拒绝日货!打倒小日本!
      

  2.   

    to  xzhifei(飞) 试过了。 string(Buffer)和strpas(Buffer)都试过了,效果一样
      

  3.   

    是什么文件如果是文本,EXCEL文件的话为什么不用 :
    var
      f : TextFile;
      s : String;
    begin
      if Open.Execute then
      begin
        AssignFile(f,Open.FileName);
        Reset(f);
        try
          While not Eof(f) do
          begin 
            readln(f,s);
            if s <> '' then
            begin
              memo1.Lines.Clear;
              memo1.Lines.Add(s);     
            end;   
          end;
        except
           f.Close;
        end;
      end;
    end;
      

  4.   

    FileRead(iFileHandle, Buffer, iFileLength);是否有错误,也就是你没有判断该函数的返回码?同时如果成功,你监控一下buffer里面是什么东西?到底怎么错了,最后你可以使用memo1.lines.loadfromfile来实现你这段代码的功能!
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      iFileHandle: Integer;
      iFileLength: Integer;
      iBytesRead: Integer;
      Buffer:string;
      i: Integer;
    begin
      if OpenDialog1.Execute then
      begin
        try      iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
          iFileLength := FileSeek(iFileHandle,0,2);
          //FileSeek(iFileHandle,0,0);
          //Buffer := AllocMem(iFileLength + 1);
          setlength(buffer,ifilelength+1);
          iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);      FileClose(iFileHandle);      memo1.Lines.Clear;
          memo1.Lines.Add(buffer); //这一句报了一个异常
        finally
        //  FreeMem(Buffer);
        end;
      end;
    end;
      

  6.   

    我只是想找找这段代码错在哪里,其他变通的方法我也知道一些。to  daniel007(添): 我一读就异常,说我读取了未分派空间,调试时显示为    ‘’,还有其他工具可以监视的方法。to  outer2000(天外流星) 
       还是一样的效果,但如果改为 Buffer:Array[0..1023] of char 就没有事,
      

  7.   

    在D7中没有问题,但读不到资料
    memo1.Lines.Add(StrPas(buffer)) ??
    改用TFileStream或TextFile(Readln)来处理了
      

  8.   

    Buffer: PChar;iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);这一句错了,我试过了
      

  9.   

    iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
    改成
    iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);
      

  10.   

    用Buffer: array[0..ArrayLen] of Char 静态分配也是一样
      

  11.   

    to : copy_paste(木石三) 和: findya(满地找牙) 
    能解释一下吗?
      

  12.   

    同意copy_paste(木石三) , findya(满地找牙) delphi的帮助文件错误太多了
      

  13.   

    Buffer^是表示什么?Buffer为什么不对呢?
    function FileRead(Handle: Integer; var Buffer; Count: LongWord): Integer;
    为什么可以这样声明 var Buffer 不要数据类型吗?
      

  14.   

    Buffer^  是指针的内容Buffer   是指针的地址
      

  15.   

    谢谢 wisenowa(127.0.0.1)  还是不太明白。这里应该送指针啊。
      

  16.   

    To  dododo(呵呵): var Buffer; 这样定义以后Buffer可以是任何类型的变量我想