我有大于2G的文件需要读写。不能成功。
    assignfile(f,self.OpenDialog1.filename);
    reset(f);
    seek(f,k);
    if not eof(f)then
    begin
       ////
    end;   
当k大于700M时就显示为表现为eof了,好像文件只有700M一样。
写文件也出现这样的问题。
有什么办法吗?或者问题处在什么地方。

解决方案 »

  1.   

    如果你的是文本文件的话,reset会把他当成readonly,所以使用reset要注意模式
      

  2.   

    这种文件还用assignfile去做
    用内存映射
      CreateFile()
      CreateFileMapping()
      MapViewOfFile()
      

  3.   

    在win下最好使用WINAPI读写文件,不管从兼容性还是稳定性都是最佳的
      

  4.   

    谢谢了。对映射文件还不是很熟悉,另外,表层已经编写好了,只修改这个底层模块。因为涉及速度问题,而且只有几句代码,用什么方式都无所谓。
    我发觉真正影响速度的就是只有几句代码。
    上次遇到一个问题对我启发很大,我程序要在一个结构中读写一个值,内存中有一个大的结构数组。
    程序要在这个结构数组中找到这个结构,然后在结构中取某个值,这个结构的size很大。
    我原先是用函数返回这个结构,然后再取值,由于是一些列值,每取一次,就要返回这个结构。
    后来改用指针,只返回指针,再取值,速度就提高了百倍。读一些列数据要一分钟的,改了后就只需要一秒。
    因为这里面没有大量的内存拷贝。
      

  5.   

    你真认为用assignfile和CreateFileMapping是一个速度级的嘛……
      

  6.   

    我一般访问文件就是用Windows的API,支持的是64位大小的文件.
    或者用Delphi的TFileStream,TFileStream支持的也是64位大小的文件.
    64位大小对现在来说是无限的,因为世界上还没有那么大的硬盘.