前提:
FileStream为文件的读写提供了默认的缓冲区问题:
1、这个缓冲区的大小可以改变吗?默认值是多少呢?
2、我填充一个空白文件
  
  FileStream filestream = new FileStream(@"c:\test.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite);   byte[] buffer= new byte[1024*1024*10]filestream.Write(buffer,0,buffer.Length);发现buffer的过大,并不能实际提高新建空白文件的速度,这是由于FileStream本身自带缓冲区默认大小造成的原因吗?3、在.net中有没有一种能够直接新建自定义空白文件大小的方法?

解决方案 »

  1.   

    filestream.Seek(1024*1024*10);
    filestream.Close();
    就添加了1024*1024*10字节的空白。
      

  2.   

    缓冲大小一般 4k - 32k足够了,再加大都没用新建空白文件必须逐个块写入,通过  SetLength 或者 Seek 都不能保证后面填的一定是0
      

  3.   

    那新建一个大点的空白文件(比如1G的),那要花很多的时间。我观察过FlashGet的新建空白文件,发现它新建空白文件的速度特别快。不知是不是C++和C#使用得方法原理不一样,C++可以直接操作底层的原因呢?
      

  4.   

    当然要花很多时间了啊,谁让你建这么大的空白文件呢FlashGet 建的不是空白文件,他是通过SetLength这样建立的就是说后面的数据容许乱码
      

  5.   

    哦,这些乱码可以通过重写文件全部覆盖吧!
    我试试SetLength。
      

  6.   

    tiaoci(我挑刺,我快乐) 说的对,0.015秒就建立了一个2G空白的文件了。呵呵,太谢谢了。
     
     还有我实验时SetLength出来的文件是空白的,不知乱码的情况什么时候会出现呢?
      

  7.   

    我也不知道什么时候会出现,可能在磁盘空间不够,去使用旧的删除文件的那些磁道的时候吧(猜的)不过MSDN上说"
    备注
    此方法重写 SetLength。如果给定值小于流的当前长度,则截断流。如果给定值大于流的当前长度,则扩展流。如果流被扩展,则新旧长度的流之间的内容是未定义的。
    "既然它提到 “则新旧长度的流之间的内容是未定义的”最好是相信MSDN的话