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
[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
解决方案 »
- 关于自定义控件图标问题
- DataGridView 显示很卡 求教问题
- c#远控软件,谁有源码??
- 关于XML问题 我现在丛数据库某一个字段取出一个字符串是XML格式的
- 这个代码,每闹明白!
- 文件 XXXXXXXXX 正由另一进程使用,因此该进程无法访问该文件。
- 请教~急~我一个项目放到2003的服务器上,出现Server Application Unavailable这个错误
- 用webBrowser控件预览一个doc文件,怎么把他关闭,否则进程中一直有个经常开着
- 请教: 在 ActiveX本IE窗口中重定向到另一个URL,并同时POST数据?
- 大神 你在哪里 gridcontrol RowCellClick事件问题
- C#里面怎样限制textBox控件里键入或粘贴的最小字符数
- 求一正则表达式
继续等待。。