如何复制具有取消复制功能的文件

本文关键字:复制 取消 功能 文件 何复制 | 更新日期: 2023-09-27 18:10:42

我正在尝试让程序能够取消副本。因此我不能使用Microsoft.VisualBasic.FileIO.FileSystem.CopyFile

在网络上有一些CopyFileEx的包装器,例如这里。然而,我宁愿不使用我不理解的东西,不希望任何意外的结果(或bug)。有没有一种可控的方法来做到这一点?或者可能是MS的包装器(在Windows API CodePack之类的东西中)?

如何复制具有取消复制功能的文件

以小块读取文件并将其写入目标。定期检查你是否被要求取消,如果你发现,停止写入并关闭文件。

您是否尝试过在块中复制流,每次检查块时检查是否设置了取消,或者是否注册了取消令牌?

例如你可以这样做:

void CopyStream(Stream inputStream, Stream outputStream)
{
    var buffer = new byte[1024];
    int bytesRead;
    while((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0)
    {
        outputStream.Write(buffer, 0, bytesRead);
        if(cancelled){
           // cleanup
           return;
        }
    }
}