简单问题:调用fileclose出错? (20分)

  • 主题发起人 主题发起人 xzmyzy
  • 开始时间 开始时间
X

xzmyzy

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
srcFileHandle, desFileHandle: integer;
buffer:pointer;
iReadData, iBufferLen: integer;
begin
srcFileHandle:= fileopen('xzm.txt',fmopenread);
desFileHandle:= filecreate('xzmbak.txt');
iBufferLen:= 500;
getmem(buffer, iBufferLen);
try
while true do
begin
iReadData:= fileread(srcFileHandle, buffer,iBufferLen);
if iReadData <> 0 then
begin
filewrite(desFileHandle, buffer, iReadData);
end;
if iReadData < iBufferLen then break;
end;
fileclose(srcFileHandle);
fileclose(desFileHandle);//出错提示"External exception C0000008'怎么解决?
finally
freemem(buffer);//执行此语句时也出错,为什么?
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);

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;
StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer));
end;
finally
FreeMem(Buffer);
end;
end;
end;
 
你这个是帮助里的,一样的不行.不知为什么?
 
将你的read 和 write中的buffer均改为:
iReadData:= fileread(srcFileHandle, buffer^,iBufferLen);
读入的是指针所指内容,而不是指针位置。
 
上面能否解释一下,
buffer是指针吧,
buffer^应该是指针所指向内存的内容吧,
fileread(srcFileHandle, buffer^,iBufferLen);
按理解来说第二个参数就是buffer而不是buffer^的.
虽然问题解决了,但好象不好理解.
 
上面的方法,虽然解决了运行的错误提示,但是复制的结果文件和源文件好象不一样,
结果文件没有delphi图标,图标与一般的.exe文件相同,而且执行时没有窗体出现,
总之,这样复制后的文件和源文件的性质不同.
 
如果 iReadData:= fileread(srcFileHandle, buffer,iBufferLen);语句不改为
iReadData:= fileread(srcFileHandle, buffer^,iBufferLen);
则结果文件与源文件完全相同,只是在freemem(buffer)执行时会出现提示"access violation at 0x77f950fd:write of addree ox00030fec"的错误.
各位富翁,怎么解决?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
816
import
I
后退
顶部