-
27-09-2019 - |
题
我有一个后台工作运行复制一个巨大的文件(几个GB),我想知道如何取消进程在副本的中间。我可以检查CancellationPending属性的副本之前,但不知道如何做到这一点时,副本已在进行中。
if (worker.CancellationPending) // check cancellation before copy
{
e.Cancel = true;
}
else
{
File.Copy("sourceFile", "destinationFile"); // need to cancel this
}
请指教,谢谢!
解决方案
我不知道,但我认为File.Copy
由不允许此功能WINAPI的CopyFile
功能的支持。
您应该朝向指向 CopyFileEx
允许回调方法每当该文件的一部分已被复制。
其他提示
我知道的唯一方法是使用 CopyFileEx(KERNEL32)一>
据我所知,后台工作人员是最适合运行很多小的操作。我知道它的混乱,但你可能想看看你的复制操作创建一个单独的线程。这样,如果你在复制的中间的时候,你可以只杀死线程。 (我不知道这是什么会做复制,寿 - 我不知道这是否会留下使用这种方法的一个临时文件)
复制中的块文件。块之间,检查是否该操作已被取消。
这可能会闻起来像一个车轮再造,但如果你不想要的DllImport CopyFileEx它是一个选项。
除了使用File.Copy
或任何其他复制功能的,你也可以复制自己的文件(从源流中读取,写入目标流)的块。在循环需要复制,你可以检查是否中止操作所有的块,然后进行必要的操作,以中止的复制过程。
不隶属于 StackOverflow