在DELPHI中,文件里数据较多,我想分段读取,就是说一次读取N(一个具体的数据,小于文件大小)个数据(以16进制形式读出,方便处理),那么读取一次后,后面该怎么继续接着读取数据?   请给个具体代码示例,谢谢!

解决方案 »

  1.   

    流式文件像流水线一样顺序操作
    var
      MyFile:TFileStream;
      Buffer:array[0..65200] of byte;
      i:integer;
    begin
      MyFile:=TFileStream.create('c:\exam.exe',fmOpenRead or fmShareDenyWrite);
      try
        i:=0;
        while i<MyFile.size do
        begin
          myfile.read(buffer,high(buffer));
          inc(i,high(buffer));
        end;
      finally
        myfile.free;
      end;
    end;随便写的代码,仅供参考
      

  2.   

    var 
      MyFile:TFileStream; 
      Buffer:array[0..Max] of byte; 
      i:integer; 
    begin 
      MyFile:=TFileStream.create('文件名',fmOpenRead or fmShareDenyWrite); 
      MyFile.Position := 0;
      try 
        i:=0; 
        while i <MyFile.size do 
        begin 
          myfile.read(buffer,SizeOf(buffer)); 
          inc(i,SizeOf(buffer)); 
        end; 
      finally 
        myfile.free; 
      end; 
    end; 
      

  3.   


    给个思路吧,以前本人也写过类似的东西1.全局变量
        BlockSize : LongWord;    // 每次读的块的大小,16的倍数
      NowPic : LongWord;    // 将要读入的文件的位置
        Buffer : PChar;          // 读入的块的缓冲区
        FI     : Integer;        // 要读入的文件句柄2. 打开文件
        FI := FileOpen(Fname,fmOpenRead or fmShareDenyNone);3. 读入数据
        FileSeek(FI,NowPoi,0);    // 定位
        if (FileRead(FI,Buffer^,BlockSize) = BlockSize) then begin
         NowPoi := NowPic + BlockSize;
       end;4. 再做其它处理
       ......5. 关闭文件
       FileClose(FI);
    将以上各部分写到合适的函数或事件中就可以了.
      

  4.   

    给个思路吧,以前本人也写过类似的东西 1.全局变量 
        BlockSize : LongWord;    // 每次读的块的大小,16的倍数 
      NowPic : LongWord;    // 将要读入的文件的位置 
        Buffer : PChar;          // 读入的块的缓冲区 
        FI    : Integer;        // 要读入的文件句柄 2. 打开文件 
        FI := FileOpen(Fname,fmOpenRead or fmShareDenyNone); 3. 读入数据 
        FileSeek(FI,NowPoi,0);    // 定位 
        if (FileRead(FI,Buffer^,BlockSize) = BlockSize) then begin 
        NowPoi := NowPoi + BlockSize; 
      end; 4. 再做其它处理 
      ...... 5. 关闭文件 
      FileClose(FI); 
    将以上各部分写到合适的函数或事件中就可以了.