如何复制具有取消副本能力的文件?

时间:2011-10-06 21:25:15

标签: c# multithreading io

我正在尝试让程序取消副本。因此我无法使用Microsoft.VisualBasic.FileIO.FileSystem.CopyFile。 网络上有CopyFileEx的一些包装,例如here。但是,我宁愿不使用我不理解的东西,也不想要任何意外的结果(或错误)。有管理的方法吗?或者也许是MS的包装器(类似于Windows API CodePack)?

感谢。

2 个答案:

答案 0 :(得分:4)

您是否尝试过以块的形式复制流,每次检查块检查是否设置了取消,或注册了取消令牌?

例如,您可以执行以下操作:

    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;
            }
        }
    }

答案 1 :(得分:3)

以小块读取文件并将其写入目的地。定期检查是否要求您取消,如果检测到,请停止写入并关闭文件。