日期:2014-05-18  浏览次数:20966 次

一小段程序, 关于二进制读取的, 请大家来看看, 诸多疑问
这是我写的复制文件的最简单例子. 

我想知道有没有更好的实现方法? 

FileStream fs = new FileStream("f:\\aa.bin", FileMode.Open);
  List<byte[]> total = new List<byte[]>();

  int length = 0;

  const int BUFFERSIZE = 1024;
  int offset = 0;

  int timesToRead = (int)Math.Ceiling(Convert.ToDouble(fs.Length)/Convert.ToDouble(BUFFERSIZE));

  for(int i = 0; i <timesToRead; i++)
  {
  byte[] bytes = new byte[BUFFERSIZE];
  length = fs.Read(bytes, offset, BUFFERSIZE);
  total.Add(bytes);
  }

  fs.Close();

  FileStream wfs = new FileStream("f:\\bb.bin", FileMode.OpenOrCreate);

  for (int i = 0; i < timesToRead; i++ )
  {
  if (i == timesToRead - 1) //这句写的不好, 不知有什么更好的方法吗
  {
  wfs.Write(total[i], 0, length);
  }
  else
  {
  wfs.Write(total[i], 0, total[i].Length);
  }
  }

  wfs.Close();

谢谢啦

------解决方案--------------------
System.IO.File.Copy (String, String) //将现有文件复制到新文件。不允许改写同名的文件。
------解决方案--------------------
晕倒,不停地开辟新的缓冲区,那与不用缓冲区一次性读到内存与何区别?
即使你内存非常大,也会用到虚存的,效率极低~