需要对一个文件(容量在10M-200M左右)进行读写,
从指定的位置开始读出内容,并按字节进行运算,
并将运算结果写入另一个文件;搜索了一阵,没有找到合适的方法...用文件流?
烦请指点,最好能有代码..谢谢!找了一段代码,但不知道怎么样按字节进行运算,烦请看看:procedure TForm1.Button1Click(Sender: TObject);
var 
    f1,f2:tfilestream; 
    I, R,P: Integer; 
    Buff: array[0..1024] of char; begin
    if FileExists(edit1.text) then
    begin 
    f1 := TFileStream.Create(edit1.text, fmOpenRead); 
    F2 := TFileStream.Create(edit1.text+'.1', fmCreate);
   
  f1.Position:=$200;
  R := F1.Read(Buff, SizeOf(Buff));
  f1.Position:=$202;
  P := F1.Read(Buff, SizeOf(Buff));
 
  //怎么样比较$200与$202的值是否相同?  //将剩下的写入文件
        while F1.Position < F1.Size do
        begin
        R := F1.Read(Buff, SizeOf(Buff));
        if R > 0 then    //r>0表示读到了数据???
         begin
          if R <1024 then
          f2.Write(buff,r)
          else
          f2.Write(buff,sizeof(buff));
         end;
        end;                      showmessage('done');
    end;
end;

解决方案 »

  1.   


    procedure TForm1.Button1Click(Sender: TObject);
    const
      BUF_SIZE = 1;
    var
        F1, F2: TFileStream;
        I, R, P: Integer;
        Buf1, Buf2: PChar;
    begin
      if FileExists(Edit1.Text) then
      begin
        F1 := TFileStream.Create(Edit1.Text, fmOpenRead);
        F2 := TFileStream.Create(Edit1.Text + '.1', fmCreate);
        GetMem(Buf1, BUF_SIZE);
        GetMem(Buf2, BUF_SIZE);
        try      F1.Position := $200;
          R := F1.Read(Buf1^, BUF_SIZE);
          F1.Position := $202;
          P := F1.Read(Buf2^, BUF_SIZE);      //怎么样比较$200与$202的值是否相同?
          if Buf1^ = Buf2^ then
          begin
            // 两者相同,你想做什么?
          end;
          //......
        finally
          FreeMem(Buf1, BUF_SIZE);
          FreeMem(Buf2, BUF_SIZE);
        end;
      end;
    end;
      

  2.   

    2楼的比较方法不对,只比较了1个字节。应该是:if CompareMem(Buf1, Buf2, BUF_SIZE) then
    begin
       // 两者相同,你想做什么?
    end;
      

  3.   

    谢谢各位,我试试先。。另想问:to godlord911 :   R := F1.Read(Buf1^, BUF_SIZE);
     语句中R的值代表什么? 表示是否读入成功??? 我还需要写入文件,还是用
      f2.Write(buff,sizeof(BUF_SIZE)); 这个??
    有没有好一点的二进制读写的教程??没有做过二进制文件的读写,所以什么都不懂!
      

  4.   

    Read的返回值表示实际读取到的字节数,比如你预读取1MB,可能实际只读取到了500KB.你要写入,先要确定位置,即使用设置Position,或者Seek进行定位。