在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;
编写代码如下:
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;
Char类型的才可以用pszBuffer[i]吧!Pchar好象不可以,我帮你试试!
pszBuffer := PChar(AllocMem(iFileLength + 1));去掉
pszBuffer:='';
new(pszBuffer); 最后还要用一下 异常保护 FINALLY 来释放内存。
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;
pszBuffer : pchar ;
begin
new(pszBuffer);//分配一个字节的空间(指向CHAR类型,所以分配一个CHAR的空间),够用吗?