BlockRead过程的简单使用

减小字体 增大字体 作者:不详  来源:不详  发布时间:2010-12-16 22:33:32

 procedure BlockRead(var F: File; var Buf; Count: Integer; [var AmtTransferred: Integer]);
 BlockRead从一个打开的文件中读取一个或多个记录到一个变量中去。
F是一个无类型文件变量,Buf是任意变量。Count是一个字整数表达式,AmtTransferred是一个可选取的类型整型变量。BlockRead读取Count个或几个记录从F文件到内存中,开始的第一个字节被Buf变量占据。实际完成读取的记录个数(少于或等于Count)被返回到AmtTransferred。可占据的全部传输块最多为Count*RecSize字节。RecSize为当文件被打开时的记录的尺寸(或128字节,如果记录没有被说明)。
begin
{$I-}
{Change to directory specified is Edit1}
ChDir(Edit1.Text);
if IOResult <> 0 then
如果全部块被传输,则AmtTransferred等于Count。如果AmtTransferred小于Count,Reacblock在传输完成之前到达文件尾。如果文件的记录大于AmtTransferred返回完成记录读取的个数。如果AmtTransferred没有被子说明,当读取的记录数不等于Count,一个I/O错误将出现。使用EinOutError异常可处理这个错误。

例子:
var
  FromF, ToF: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..2048] of Char;
begin
  if OpenDialog1.Execute then   { 打开文件对话框}
  begin
    AssignFile(FromF, OpenDialog1.FileName);
    Reset(FromF, 1);   { Record size = 1 }
    if SaveDialog1.Execute then { 保存文件对话框}
    begin
      AssignFile(ToF, SaveDialog1.FileName);   { 打开输出文件 }
      Rewrite(ToF, 1); { Record size = 1 }
      Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
        + ' bytes...');
      repeat
        BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
        CloseFile(FromF);
        CloseFile(ToF);
    end;
  end;
end;

Tags:

作者:不详
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论