我需要合并两个PDF文件。 但有时文件可能会被锁定
我写了这段代码,但我想知道它是不是最聪明的解决方案:
private static int FILE_LOCKED_WAIT_PERIOD = 1000;
while (true)
{
// If the file is in use, IOException will be thrown.
// If file is not permitted to be opened because of Permission
// Restrictions, UnauthorizedAccessException will be thrown.
// For all other, Use normal Exception.
try
{
inputDocument1 = PdfReader.Open(fileToMerge, PdfDocumentOpenMode.Import);
break;
}
catch (IOException)
{
Thread.Sleep(FILE_LOCKED_WAIT_PERIOD);
}
catch (UnauthorizedAccessException)
{
Thread.Sleep(FILE_LOCKED_WAIT_PERIOD);
}
catch (Exception)
{
Thread.Sleep(FILE_LOCKED_WAIT_PERIOD);
}
}
答案 0 :(得分:0)
您应该添加一个计时器,以便在再次尝试文件操作之前暂停几下。
此外,你应该有反击,这样你就不会无限期地等待,并在你说15次尝试后退出。
答案 1 :(得分:0)
这取决于: 1)它是一个独立于用户的系统内部的进程吗?如果是这样,您应该尝试找出锁定文件的内容并明确等待。随机等待然后反复尝试可能会导致问题。
2)用户是否可以打开文件?在这种情况下,等待是没有用的,因为系统可以整个周末重试,因为用户突然离开了一天。您无法控制用户时间。只需告诉用户您无法执行请求的操作,因为该文件已打开并让他们再试一次。
通常等待N秒/分钟并不是真正的解决方案。要么你知道问题可能是什么,民意调查和解决问题,或者你无法做任何事情,只是发出通知。
答案 2 :(得分:0)
没有特殊功能可以做到这一点。实际上,即使存在此功能,某些进程仍然可以在“锁定检查”和“文件打开”之间轻松锁定此文件