我的程序中有两个线程。 一个帖子 会持续观察USB事件(USB已插入或已移除)。
第二个线程 (文件复制线程)继续监视第一个线程设置的USB插入标志。一旦插入USB,文件复制线程就会开始将Pdf文件从PC复制到USB。
一旦USB被移除,USB监控线程就会将isUSBInsterted
标志设置为False
,文件复制线程应该停止文件传输。
问题:只有在文件复制线程已经传输Pdf文件但USB已经弹出时才会出现问题。在这种情况下,在USB中创建损坏的Pdf文件,稍后即使我尝试删除此文件,文件也会再次出现(其他问题如无法覆盖等)。
问题:如何确保File.Copy()
不会在USB中创建损坏的文件。我认为即使程序不是多线程的,也会出现问题,因为这与开始将文件复制到USB有关,并且在复制过程正在进行的那一刻就会弹出USB。
我的复制代码:
private bool CopyFile(string FilenameToBeCopied, string SrcDirectory, string DstDirectory)
{
bool CopiedSuccessfully = false;
try
{
Directory.CreateDirectory(DstDirectory); //This will create a directory if it does not exist yet.
File.Copy(SrcDirectory + "/" + FilenameToBeCopied, DstDirectory + "/" + FilenameToBeCopied, true);
Console.WriteLine("Copied: " + FilenameToBeCopied);
CopiedSuccessfully = true;
}
catch (IOException copyError)
{
Console.WriteLine(copyError.Message);
}
return CopiedSuccessfully;
}
答案 0 :(得分:1)
这是预期的结果
如果我理解了您的问题,那么您正在写入存储介质,并在执行此操作时将其删除。这就像要求数据被破坏一样。
编辑:
这显然是由不知道如何操作电脑的用户引起的,虽然它会发生,但我不会浪费太多时间。我会以另一种方式解决这个问题,而不是试图恢复损坏的数据。
如果存在这种可能性,您可能需要检查在这种情况下是否可以选择格式化驱动器。它可能会解决您的问题,并且可能对用户来说是一个小问题。