在delphi中,想对文件进行打开操作,即在opendialogs中选择一文件,记录地址然后用fileopen打开并用fileread读到缓冲区,最后输出到stringgrid中。可运行出错!不能显示,请问问题出在何处?应怎样解决?(也可用其他方法实现文件的打开、读取)
编写代码如下:
var
    iFileHandle : integer ;
    iFileLength : integer ;
    iBytesRead : integer ;
    pszBuffer : pchar ;
    i : integer ;
begin
    iFileHandle:=fileopen(edit2.text,fmOpenRead);
    iFileLength:=FileSeek(iFileHandle,0,2);
    FileSeek(iFileHandle,0,0);
    pszBuffer:='';
    new(pszBuffer);                  //问题有可能出在这里,但不知应如何改正
    iBytesRead:=FileRead(iFileHandle,pszBuffer,iFileLength);
    fileclose(iFileHandle);
    for i:=0 to iBytesRead-1 do
    begin
      StringGrid1.RowCount:=form2.StringGrid1.RowCount+1;
      StringGrid1.Cells[0,i]:=pszBuffer[i];            //单步时到这里出错!
    end;
end;

解决方案 »

  1.   

    先声明一点你都没有释放内存。
    Char类型的才可以用pszBuffer[i]吧!Pchar好象不可以,我帮你试试!
      

  2.   

    在  FileSeek(iFileHandle,0,0) 后面加上:
      pszBuffer := PChar(AllocMem(iFileLength + 1));去掉
        pszBuffer:='';
        new(pszBuffer);                  最后还要用一下 异常保护   FINALLY 来释放内存。
      

  3.   

    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);
          for i := 0 to iBytesRead-1 do
          begin
            StringGrid1.RowCount := StringGrid1.RowCount + 1;
            StringGrid1.Cells[1,i+1] := Buffer[i];
            StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
          end;
        finally
          FreeMem(Buffer);
        end;
      end;
      

  4.   

    var
       pszBuffer : pchar ;
    begin
        new(pszBuffer);//分配一个字节的空间(指向CHAR类型,所以分配一个CHAR的空间),够用吗?