因为这只是一个文件写入问题,所以我放到这里来了。下面的测试都是在整理碎片之后做的,分区空间还有6G。
我自己写了一个,是4K写一次的,100M文件产生了180多碎片,后来换成4M写一次120多碎片。
考察windows的文件复制操作,不产生碎片。
飞鸽传书60多碎片。
FlashFXP不产生碎片。
预分配磁盘空间我不知道怎么做,看了C的库函数chsize的实现,windows系统上用的是在后面写0的办法,我觉得和直接写结果差不多。

解决方案 »

  1.   

    记得MSDN中有一篇文章讲了如何减少碎片. 你在MSDN中搜索"HOWTO:"这个关键字找找看.
      

  2.   

    HOWTO: Overload New to Reduce Memory Fragmentation
    查到了这样的……
      

  3.   

    实际上,可以先写一个临时文件,然后复制一次,再把临时文件删了。我觉得这是投机取巧,可是还是有软件这么干的,winrar的拖拽操作就是这么做的,于是我就经常看见文件复制进度条。
      

  4.   

    你创建一个指定大小的文件然后再写进去呢。
    CreateFile -> SetFilePointerEx -> SetEndOfFile
      

  5.   

    我上来就是要报告这个发现的,我使用的是SetFilePointer,反正都一样。
    Note that it is not an error to set the file pointer to a position beyond the end of the file. 
    真不知道windowsAPI的思维怎么是这个样子,不然就是我受老传统的毒害太深了。
    正好分也有人给了,有几次最后的答案还是自己找到的,都不知道分给谁。