哪有这样一次读取那么大的数据的,文件4G你一次就申请4G内存buff来装?更何况32位系统无法申请到4G内存。
读取大文件都应该分块来读取,特别是网络传输,例如一次读取个50M处理50M,然后反复直到读完

解决方案 »

  1.   

    可能说的有误解  我现在就是 分块读取 一次 4096
    我用的indy 10var
      iFileHandle: integer;
      iFileLen, cnt: Int64;
      buf: array[0..4096] of byte;
      ...........
          iFileHandle := FileOpen(edtFileName.Text, fmOpenRead);
          iFileLen := FileSeek(iFileHandle, 0, 2);
          FileSeek(iFileHandle, 0, 0);      cnt := FileRead(iFileHandle, buf, 4096);问题出在这里  >2G文件 buf全为0  <2G则正常      IdTCPClient1.IOHandler.Write(RawToBytes(buf,sizeof(buf)),cnt);问题出在 FileRead   现在我的代码传输<2GB文件没有问题