据说文件映射文件的读写很快的啊,但是我做了个文件的映射怎么感觉很慢啊,2Mb的文件?至少都要1到2秒的时间?

解决方案 »

  1.   

    Topen:=OpenFIle(Filename,Struct,Of_ReadWrite );if (Topen<>0) and (not ScanFileStop)then
       begin
        topen2 :=CreateFileMapping(Topen,nil,PAGE_READWRITE,0,Filesize,nil);
        end;
        if Topen2<>0 then begin
        P:= MapViewOfFile(topen2, FILE_MAP_Read, 0, 0, Filesize);
      b:=Pbyte(Longint(p)+1000);
      showmessage(b^);
    我想读取的内容,全部转换成hex要怎么做啊
      

  2.   

    最笨的办法,一个字节一个字节的读出来,转成十六进制,然后存入一个String对象,最后输出string对象。
      

  3.   


    你上面的代碼會慢嗎?? 你現在是想轉成HEX還是上面的代碼加載很慢??
      

  4.   

    我想把读到数据全换成hex,是不是必须要一个一个读啊
      

  5.   

    把BUFFER調大點。一次性讀的太小了,應該是。
      

  6.   

    大一点啊,能不能给个转换hex好一点代码啊,汇编我不会啊,谢谢啊
      

  7.   

    我只给出了我认为的核心代码,你肯定需要自己再修订。不保证可运行,应视为伪代码。
    也许
    var
      pc: PCardinal;
      cdnl: Cardinal;
      str: String;
      count, s: Integer;
    begin
      ...{可能的其他操作}
      str:= '';
      if filesize mod 4 = 0 then
        s:= filesize div 4;
      else
      begin
        ...
      end;
      {byte 到 cardinal 需要除以4 吧。没有给出字节不对齐的情况。}
      {需要你自己去判断filesize是否能被4完全整除,并据此做相应处理。}
      ...{可能的其他操作}
      for count:= 0 to s - 1 then      pc:= p;
        cdnl:= Cardinal(pc^);
    //  cdnl:= Cardinal((p+ count)^);
    //此时 pc可不用。也许。
        str:= str+ IntToHex(cdnl);
        inc(pc);
      end;
      {如果是在函数中也许你需要返回str。}
      //Result:= str;
      ...{可能的其他操作}
    end;
      

  8.   

    另,注意,
    IntToHex(Value: Int64; Digits: Integer): string;
    当中:
    Value是要转换的整数,Digits是转换结果允许的最少位数。