我用一个文件流把一个旧文件写到一个新的文件里面去,发现新的文件只要超过2G就写不进数据了,各位大哥能有好点的方法吗?

解决方案 »

  1.   

    是什么文件系统?比如FAT32等文件系统不支持大文件。
      

  2.   

    在NTFS格式下的,不知道怎么回事呢,写到2G就写不进去了if FileExists(path) then
        TempStream := TFileStream.Create(path,fmopenwrite)
      else
        TempStream := TFileStream.Create(path,fmCreate);  TempStream.Seek(TempStream.Size,soFromBeginning);
      stream.Position:=0;
      TempStream.CopyFrom(stream,stream.Size);
      TempStream.Free;
      

  3.   

    var
      TempStream:TFileStream;
      

  4.   

    在win32下,内存最大分配是2G。
    你还是使用其他算法处理吧,不要使用FileStream了。
    可以使用File来处理。
      

  5.   

    可以使用File来处理。能够提供一下例子吗?
      

  6.   

    早期Delphi版本的流的Position/Size是32位整数,所以大小有2GB限制.后来流的大小改成Int64的了,大小基本可以理解成无限的.
    我现在用Delphi2010和DelphiXE,我记不清出是哪个版本开始改成64位整数的了.
    楼主可以看看自己Delphi的Stream的Position/Size属性是什么类型.
    如果是32位整数就建议楼主赶快升级吧.
    如果是64位整数,那说明是其他问题引起的.
      

  7.   

    TempStream.Seek(TempStream.Size,soFromBeginning);虽然TFileStream的Seek参数支持int64,但是实际上最终调用的是FileSeek这个函数,在这个函数当中虽然使用的API(SetFilePointer)支持大文件,但是其高32位使用的是Nil,因此只支持32位的值。当然即便如此也能够支持近4G的文件。
    建议把这里更改为TempStream.Seek(0,soFromEnd);