我有一个后台工作程序正在运行以复制一个巨大的文件(几个GB),我想知道如何在副本中间取消该过程。我可以在复制之前检查CancellationPending属性,但在复制已经进行时不知道如何进行。
if (worker.CancellationPending) // check cancellation before copy
{
e.Cancel = true;
}
else
{
File.Copy("sourceFile", "destinationFile"); // need to cancel this
}
请指教,谢谢!
答案 0 :(得分:6)
我不确定,但我认为File.Copy
由winapi的CopyFile
函数支持,不支持此功能。
你应该指向允许在复制文件的一部分时使用回调方法的CopyFileEx
。
答案 1 :(得分:2)
我所知道的唯一方法是使用CopyFileEx (kernel32)
答案 2 :(得分:0)
据我所知,后台工作人员最适合进行大量的小操作。我知道它很乱,但您可能想要为复制操作创建一个单独的线程。这样,如果你正处于复制过程中,你可以直接杀死该线程。 (我不确定这会对复制做什么,所以 - 我不知道它是否会在使用这种方法后留下一个临时文件。)
答案 3 :(得分:0)
以块的形式复制文件。在块之间,检查操作是否已被取消。
这可能闻起来就像轮子一样,但如果你不想传播CopyFileEx,这是一个选择。
答案 4 :(得分:0)
您也可以自己复制文件(从源流中读取,写入目标流),而不是使用File.Copy
或任何其他复制功能。在复制所有块所需的循环中,您可以检查是否中止操作,然后执行必要的操作以中止复制过程。