c# 文件拷贝速度?
fastcopy到拷贝速度可能大家都知道了,它几乎能达到硬盘极限,它的网站上有提供源码,可惜看不懂,希望有人帮忙翻译一
下,看看它的思路是怎么样的。
我有用过下面的方法来测试,可是当bufferSize超过40以后就出现硬盘不能同时读写的问题而且拷贝最大速度也就是设置的
值,当bufferSize设置超过60就会报错。
[DllImport("kernel32.dll", SetLastError = true)]
static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);
public bool Copyfile(string sourcepath, string tragepath, int buffer_size)
{
try
{
SafeFileHandle fileRead = CreateFile(sourcepath, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, IntPtr.Zero);
SafeFileHandle filewrite = CreateFile(tragepath, GENERIC_WRITE, FILE_SHARE_READ, IntPtr.Zero, CREATE_ALWAYS, FILE_FLAG_NO_BUFFERING, IntPtr.Zero);
int bufferSize = 1024 * 1024 * buffer_size;
FileStream fsr = new FileStream(fileRead, FileAccess.Read);
FileStream fsw = new FileStream(filewrite, FileAccess.Write);
BinaryReader breader = new BinaryReader(fsr);
BinaryWriter bweader = new BinaryWriter(fsw);
byte[] buffer = new byte[bufferSize];
while (fsr.Position < fsr.Length)
{
int readCount = breader.Read(buffer, 0, bufferSize);
bweader.Write(buffer, 0, readCount);
}
breader.Close();
bweader.Close();
fsr.Close();
fsw.Close();
这里是源码下载地址:http://www.ipmsg.org/archive/FastCopy199r3src.zip