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

C# 如何复制具有取消复制功能的文件?,c#,multithreading,io,C#,Multithreading,Io,我想让程序取消拷贝。因此,我不能使用Microsoft.VisualBasic.FileIO.FileSystem.CopyFile。 web上有一些用于CopyFileEx的包装,例如。然而,我宁愿不使用我不理解的东西,也不希望有任何意外的结果(或bug)。有没有管理好的方法来做到这一点?或者是MS的包装器(类似于Windows API代码包) 谢谢。把文件分成小块读出来,然后写到目的地。定期检查是否有人要求您取消,如果您检测到,请停止写入并关闭文件。您是否尝试过分块复制流,并且每次检查分块时

我想让程序取消拷贝。因此,我不能使用
Microsoft.VisualBasic.FileIO.FileSystem.CopyFile
。 web上有一些用于
CopyFileEx
的包装,例如。然而,我宁愿不使用我不理解的东西,也不希望有任何意外的结果(或bug)。有没有管理好的方法来做到这一点?或者是MS的包装器(类似于Windows API代码包)


谢谢。

把文件分成小块读出来,然后写到目的地。定期检查是否有人要求您取消,如果您检测到,请停止写入并关闭文件。

您是否尝试过分块复制流,并且每次检查分块时都会检查是否设置了取消,或者是否注册了取消令牌

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

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

不管你怎么做,你可能想要复制到一个临时文件,然后在复制完成后将临时文件移动到正确的位置。这样,当复制被取消时,您就不会丢弃(可能存在的)目标文件。正确复制文件是非常困难的。使用Toub的代码。在编码器的回答中看到,例如,我的代码不会利用DMA。如果你能看到这个,请看这里。。。