0

我需要合并两个 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);
                        }
                    }
4

3 回答 3

0

您应该添加一个计时器,以便在再次尝试文件操作之前点击几下睡眠。

此外,您应该有柜台,这样您就不会无限期地等待,并且在尝试 15 次后退出。

于 2010-03-30T21:20:03.143 回答
0

那么这取决于:1)它是一个独立于用户的系统内部的进程吗?如果是这样,您应该尝试找出锁定文件的原因并明确等待。随机等待然后一遍又一遍地尝试可能会导致问题。

2) 是可能打开文件的用户吗?在这种情况下,等待是没有帮助的,因为系统可能会在整个周末重试,因为用户突然离开了一天。您无法控制用户时间。只需告诉用户您无法执行请求的操作,因为文件已打开并让他们重试。

通常等待 N 秒/分钟并不是真正的解决方案。要么你知道问题可能是什么,然后轮询并解决问题,要么你真的什么也做不了,只是发出通知。

于 2010-03-30T21:22:45.480 回答
0

没有特殊功能可以做到这一点。实际上即使这个功能存在,一些进程仍然可以在你的“锁定检查”和“文件打开”之间轻松锁定这个文件

于 2010-03-30T21:27:00.010 回答